Пример #1
0
        public string GetGameboardPath(Patron patron, int programGameId)
        {
            var patronPoints       = PatronPoints.GetTotalPatronPoints(patron.PID);
            var programGameLevelDs = ProgramGameLevel.GetAll(programGameId);

            int normalLevelTotalPoints = 0;

            for (var i = 0; i < programGameLevelDs.Tables[0].Rows.Count; i++)
            {
                normalLevelTotalPoints +=
                    Convert.ToInt32(programGameLevelDs.Tables[0].Rows[i]["PointNumber"]);
            }
            var onBonusLevel = (patronPoints > normalLevelTotalPoints);

            var gameboardPath = onBonusLevel
                ? string.Format(BaseBonusGameBoardPath, programGameId)
                : string.Format(BaseGameBoardPath, programGameId);

            if (!File.Exists(HttpContext.Current.Server.MapPath(gameboardPath)))
            {
                return(null);
            }

            return(gameboardPath);
        }
Пример #2
0
        public AwardPoints(int PID)
        {
            patron       = Patron.FetchObject(PID);
            pgm          = Programs.FetchObject(patron.ProgID);
            EarnedBadges = new List <Badge>();

            StartingPoints = PatronPoints.GetTotalPatronPoints(patron.PID);
            EndingPoints   = StartingPoints;
        }
Пример #3
0
        public void LoadData()
        {
            var patron = (Patron)Session["Patron"];

            int totalPoints = PatronPoints.GetTotalPatronPoints(patron.PID);

            lblPoints.Text = totalPoints.ToInt();
            var pgm = Programs.FetchObject(patron.ProgID);

            if (pgm.ProgramGameID > 0)
            {
                if (ProgramGame.FetchObject(pgm.ProgramGameID) != null)
                {
                    LoadNextLevelInfo(patron, pgm, totalPoints);
                }
            }


            int readingPoints             = PatronPoints.GetPatronReadingPoints(patron.PID);
            RegistrationSettings settings = RegistrationSettings.FetchObject(patron.TenID);

            if (settings.Goal_Show)
            {
                int totalGoal = patron.GoalCache;

                int percent = 0;

                /* avoid divide by zero */
                if (totalGoal > 0)
                {
                    percent = (readingPoints * 100) / totalGoal;
                }

                String percentString = $"{percent}%";
                lblPercentGoal.Text = percentString;


                /* display over 100% in label, but do not allow bar to extend outside of bounds */
                int    widthPercent       = Math.Min(percent, 100);
                String widthPercentString = $"{widthPercent}%";

                divGoalProgressBar.Style["width"] = widthPercentString;
            }
            else
            {
                divGoalProgress.Visible = false;
            }
        }
Пример #4
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                var PID1 = int.Parse(Session["CURR_PATRON_ID"].ToString());
                var p    = Patron.FetchObject(PID1);

                PatronNavigation.NavigateUrl = string.Format("~/ControlRoom/Modules/Patrons/PatronDetails.aspx?pid={0}", PID1);

                txtUsername.Text = p.Username;
                txtEmail.Text    = p.EmailAddress;

                if (p.DOB == DateTime.MinValue)
                {
                    DobLabel.Visible = false;
                    txtDOB.Visible   = false;
                }
                else
                {
                    DobLabel.Visible = true;
                    txtDOB.Visible   = true;
                    txtDOB.Text      = p.DOB.ToShortDateString();
                }
                txtFirstName.Text = p.FirstName;
                txtLastName.Text  = p.LastName;
                if (string.IsNullOrWhiteSpace(p.Gender))
                {
                    GenderLabel.Visible = false;
                    txtGender.Visible   = false;
                }
                else
                {
                    GenderLabel.Visible = true;
                    txtGender.Visible   = true;
                    txtGender.Text      = p.Gender;
                }

                Registered.Text = p.RegistrationDate.ToString();

                PointTotal.Text = PatronPoints.GetTotalPatronPoints(p.PID).ToString();

                if (p.ProgID != 0)
                {
                    txtProgram.Text = Programs.FetchObject(p.ProgID).AdminName;
                }
            }
        }
        public void LoadData()
        {
            var patron = (Patron)Session["Patron"];

            int tp = PatronPoints.GetTotalPatronPoints(patron.PID);

            lblPoints.Text = tp.ToInt();
            var pgm = Programs.FetchObject(patron.ProgID);

            if (pgm.ProgramGameID > 0)
            {
                if (ProgramGame.FetchObject(pgm.ProgramGameID) != null)
                {
                    LoadNextLevelInfo(patron, pgm, tp);
                }
            }
        }
Пример #6
0
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["Patron"] == null)
                {
                    Response.Redirect("/");
                }

                var patron   = (Patron)Session["Patron"];
                var pgm      = Programs.FetchObject(patron.ProgID);
                int tp       = PatronPoints.GetTotalPatronPoints(patron.PID);
                var gm       = ProgramGame.FetchObject(pgm.ProgramGameID);
                var defMGID1 = 0;
                var defMGID2 = 0;
                if (gm != null)
                {
                    defMGID1 = gm.Minigame1ID;
                    defMGID2 = gm.Minigame2ID;
                }

                /*
                 * string LevelIDs = GetGameInfo(patron, pgm, gm, tp);
                 *
                 * var getMinigames0 = DAL.Programs.GetProgramMinigames(LevelIDs, 0, defMGID1);
                 * rptrx1.DataSource = getMinigames0;
                 * rptrx1.DataBind();
                 * var getMinigames1 = DAL.Programs.GetProgramMinigames(LevelIDs, 1, defMGID2);
                 * rptrx2.DataSource = getMinigames1;
                 * rptrx2.DataBind();
                 */

                var getMinigames0 = DAL.Minigame.GetMinigamesList(GetMGIDs(patron, pgm, gm, tp, defMGID1, 1));
                rptrx1.DataSource = getMinigames0;
                rptrx1.DataBind();
                var getMinigames1 = DAL.Minigame.GetMinigamesList(GetMGIDs(patron, pgm, gm, tp, defMGID2, 2));
                rptrx2.DataSource = getMinigames1;
                rptrx2.DataBind();

                NoAdventures.Visible = getMinigames0.Tables[0].Rows.Count == 0 &&
                                       getMinigames1.Tables[0].Rows.Count == 0;
            }
        }
        public string GameBoardImage()
        {
            var pp = PatronPoints.GetTotalPatronPoints(((Patron)Session["Patron"]).PID);;     //pp = patron points

            // -------------------------------------------
            if (Request["p"] != null)
            {
                int.TryParse(Request["p"].ToString(), out pp);
            }
            // -------------------------------------------

            var ds = ProgramGameLevel.GetAll(GetGame().PGID);
            var normalLevelTotalPoints = GetGameCompletionPoints(ds);
            var bonus = (pp > normalLevelTotalPoints);

            if (bonus)
            {
                return(GameBoardBonusImage);
            }
            return(string.Format("/images/Games/Board/{0}.png", GetGame().PGID.ToString()));
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["Patron"] == null)
                {
                    Response.Redirect("/");
                }

                var patron = (Patron)Session["Patron"];
                var pgm    = Programs.FetchObject(patron.ProgID);
                int tp     = PatronPoints.GetTotalPatronPoints(patron.PID);


                string LevelIDs = GetGameInfo(patron, pgm, tp);

                var getMinigames0 = DAL.Programs.GetProgramMinigames(LevelIDs, 0);
                rptrx1.DataSource = getMinigames0;
                rptrx1.DataBind();
                var getMinigames1 = DAL.Programs.GetProgramMinigames(LevelIDs, 1);
                rptrx2.DataSource = getMinigames1;
                rptrx2.DataBind();
            }
        }
Пример #9
0
        protected void Page_Load(object sender, EventArgs e)
        {
            var patron = Session[SessionKey.Patron] as Patron;

            if (patron == null)
            {
                Response.Redirect("~");
            }

            Programs    pg = null;
            ProgramGame gm = null;
            var         pp = 0;

            try {
                pg = Programs.FetchObject(patron.ProgID);
                gm = GetGame(patron);
                pp = PatronPoints.GetTotalPatronPoints(patron.PID);
            } catch {
                pg = null;
                gm = null;
            }
            if (pg == null || gm == null)
            {
                Response.Redirect(Server.MapPath("~/images/game_map_icon.png"));
            }

            var PID        = pg.PID;
            var numSquares = gm.BoardWidth;
            var width      = 800;
            var height     = 800;

            var squareSize = width / numSquares;

            width = height = squareSize * numSquares;

            var backImageFile   = Server.MapPath(new Logic.Game().GetGameboardPath(patron, gm.PGID));
            var stampImageFile  = Server.MapPath(string.Format(StampBasePath, gm.PGID));
            var avatarImageFile = Server.MapPath(string.Format(AvatarBasePath, patron.AvatarID));

            var newBmp = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

            System.Drawing.Image avatarImage = null;
            System.Drawing.Image stampImage  = null;
            ;
            try {
                newBmp.SetResolution(72, 72);
                newBmp.MakeTransparent();
            } catch { }

            var newGraphic = System.Drawing.Graphics.FromImage(newBmp);

            try {
                newGraphic.SmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                newGraphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                var backImage = System.Drawing.Image.FromFile(backImageFile);
                newGraphic.DrawImage(backImage, 0, 0, width, height);
            } catch { }

            try {
                avatarImage = System.Drawing.Image.FromFile(avatarImageFile);
            } catch { }
            try {
                stampImage = System.Drawing.Image.FromFile(stampImageFile);
            } catch { }
            // ----------------------------------------------
            if (Request["p"] != null)
            {
                int.TryParse(Request["p"].ToString(), out pp);
            }
            // -------------------------------------------
            var ds = ProgramGameLevel.GetAll(GetGame(patron).PGID);


            var normalLevelTotalPoints = GetGameCompletionPoints(ds);
            var bonusLevelTotalPoints  = GetGameCompletionBonusPoints(ds, patron);


            // in bonus levels if we have more points accumulated than the total normal level points
            var bonus        = (pp > normalLevelTotalPoints);
            var bonusPostfix = (bonus ? "Bonus" : "");
            var rp           = pp; //remaining points

            if (bonus)
            {
                // if we are on the bonus, eliminate the "fully completed boards/levels) and then see what the remainder of the points is.
                rp = rp - normalLevelTotalPoints;
                rp = rp % bonusLevelTotalPoints;
            }
            var idx = 0;

            // ----------------------------------------------

            for (var i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                idx++;
                var multiplier  = (bonus ? GetGame(patron).BonusLevelPointMultiplier : 1.00m);
                var levelPoints = Convert.ToInt32(Convert.ToInt32(ds.Tables[0].Rows[i]["PointNumber"]) * multiplier);

                var locX = Convert.ToInt32(ds.Tables[0].Rows[i]["LocationX" + bonusPostfix]) - 1;
                var locY = Convert.ToInt32(ds.Tables[0].Rows[i]["LocationY" + bonusPostfix]) - 1;
                rp = rp - levelPoints;
                if (rp < 0)
                {
                    if (avatarImage != null)
                    {
                        newGraphic.DrawImage(avatarImage, locX * squareSize, locY * squareSize, squareSize, squareSize);
                    }
                    break;
                }
                else
                {
                    if (stampImage != null)
                    {
                        newGraphic.DrawImage(stampImage, locX * squareSize, locY * squareSize, squareSize, squareSize);
                    }
                }
            }



            Response.ContentType = "image/png";
            EnableViewState      = false;
            newBmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);

            if (stampImage != null)
            {
                stampImage.Dispose();
            }
            if (avatarImage != null)
            {
                avatarImage.Dispose();
            }
            newGraphic.Dispose();
            newBmp.Dispose();
            Response.End();
        }
Пример #10
0
        protected void rptr_ItemDataBound(object source, RepeaterItemEventArgs e)
        {
            if (e.Item.ItemType == ListItemType.Item ||
                e.Item.ItemType == ListItemType.AlternatingItem)
            {
                var patronRecord = (DataRowView)e.Item.DataItem;
                var patronId     = patronRecord["PID"].ToString();
                var avatarState  = patronRecord["AvatarState"].ToString();

                string potentialAvatarPath = null;
                string avatarPathSm        = NoAvatarPathSm;
                string avatarPathMd        = null;
                string avatarPathLg        = null;

                potentialAvatarPath = string.Format("~/images/AvatarCache/sm_{0}.png",
                                                    avatarState);
                if (File.Exists(Server.MapPath(potentialAvatarPath)))
                {
                    avatarPathSm = potentialAvatarPath;
                }

                potentialAvatarPath = string.Format("~/images/AvatarCache/md_{0}.png",
                                                    avatarState);
                if (File.Exists(Server.MapPath(potentialAvatarPath)))
                {
                    avatarPathMd = potentialAvatarPath;
                }

                potentialAvatarPath = string.Format("~/images/AvatarCache/{0}.png",
                                                    avatarState);
                if (File.Exists(Server.MapPath(potentialAvatarPath)))
                {
                    avatarPathLg = potentialAvatarPath;
                }

                var image = (Image)e.Item.FindControl("avatarImage");
                image.ImageUrl = avatarPathSm;
                if (!string.IsNullOrEmpty(avatarPathMd))
                {
                    string srcSet = string.Format("{0} 1x, {1} 2x",
                                                  VirtualPathUtility.ToAbsolute(avatarPathSm),
                                                  VirtualPathUtility.ToAbsolute(avatarPathMd));
                    image.Attributes.Add("srcset", srcSet);
                }

                var avatarLink = (HyperLink)e.Item.FindControl("avatarLink");
                if (!string.IsNullOrEmpty(avatarPathLg))
                {
                    avatarLink.NavigateUrl = avatarPathLg;
                }

                var scoreControl = e.Item.FindControl("CurrentScore") as Label;
                if (scoreControl != null)
                {
                    var points = PatronPoints.GetTotalPatronPoints((int)patronRecord["PID"]);
                    scoreControl.Text = string.Format("{0} points", points);
                }

                var rewardLabel     = e.Item.FindControl("ProgramRewardCodes") as Label;
                var rewardCodesData = DAL.ProgramCodes.GetAllForPatron((int)patronRecord["PID"]);
                if (rewardCodesData != null &&
                    rewardCodesData.Tables.Count > 0 &&
                    rewardCodesData.Tables[0].Rows.Count > 0)
                {
                    var codes = rewardCodesData.Tables[0]
                                .AsEnumerable()
                                .Select(r => r.Field <string>("ShortCode"))
                                .ToArray();
                    rewardLabel.Text         = string.Join("<br>", codes);
                    ProgramCodeLabel.Visible = true;
                }
                else
                {
                    rewardLabel.Text = string.Empty;
                }
            }
        }
Пример #11
0
        protected void btnSubmit_Click(object sender, EventArgs e)
        {
            var txtCount = txtCountSubmitted.Text.Trim();
            var txtCode  = txtProgramCode.Text.Trim();

            // ---------------------------------------------------------------------------------------------------
            if (txtCount.Length > 0 && txtCode.Length > 0)
            {
                lblMessage.ForeColor = System.Drawing.Color.Red;
                lblMessage.Text      = "Please enter either how much you have read OR a code, but not both.<br><br>";
                return;
            }

            if (txtCount.Length == 0 && txtCode.Length == 0)
            {
                lblMessage.ForeColor = System.Drawing.Color.Red;
                lblMessage.Text      = "Please enter either how much you have read OR a code.<br><br>";
                return;
            }
            // ---------------------------------------------------------------------------------------------------

            int PID            = int.Parse(lblPID.Text);
            int PGID           = int.Parse(lblPGID.Text);
            var StartingPoints = PatronPoints.GetTotalPatronPoints(PID);


            var pa      = new AwardPoints(PID);
            var sBadges = "";

            #region Reading
            // ---------------------------------------------------------------------------------------------------
            // Logging reading ...

            //Badge EarnedBadge;
            if (txtCount.Length > 0)
            {
                var intCount = 0;
                if (!int.TryParse(txtCount, out intCount))
                {
                    lblMessage.ForeColor = System.Drawing.Color.Red;
                    lblMessage.Text      = "How much was read must be a number.";
                    return;
                }

                if (intCount < 0)
                {
                    lblMessage.ForeColor = System.Drawing.Color.Red;
                    lblMessage.Text      = "Hmmm, you must enter a positive number...<br><br>";
                    return;
                }

                int maxAmountForLogging       = 0;
                int maxPointsPerDayForLogging = SRPSettings.GetSettingValue("MaxPtsDay").SafeToInt();
                switch (int.Parse(rbActivityType.SelectedValue))
                {
                case 0: maxAmountForLogging = SRPSettings.GetSettingValue("MaxBook").SafeToInt();
                    break;

                case 1: maxAmountForLogging = SRPSettings.GetSettingValue("MaxPage").SafeToInt();
                    break;

                //case 2: maxAmountForLogging = SRPSettings.GetSettingValue("MaxPar").SafeToInt();
                //    break;
                case 3: maxAmountForLogging = SRPSettings.GetSettingValue("MaxMin").SafeToInt();
                    break;

                default: maxAmountForLogging = SRPSettings.GetSettingValue("MaxMin").SafeToInt();
                    break;
                }

                if (intCount > maxAmountForLogging)
                {
                    lblMessage.ForeColor = System.Drawing.Color.Red;
                    lblMessage.Text      = string.Format("That is an awful lot of reading... unfortunately the maximum you can submit at one time is {0} {1}.<br><br>",
                                                         maxAmountForLogging, ((ActivityType)int.Parse(rbActivityType.SelectedValue)).ToString());
                    return;
                }

                // convert pages/minutes/etc. to points
                var pc = new ProgramGamePointConversion();
                pc.FetchByActivityId(PGID, int.Parse(rbActivityType.SelectedValue));
                var points = Convert.ToInt32(intCount * pc.PointCount / pc.ActivityCount);

                var allPointsToday = PatronPoints.GetTotalPatronPoints(PID, DateTime.Now);
                if (intCount + allPointsToday > maxPointsPerDayForLogging)
                {
                    lblMessage.ForeColor = System.Drawing.Color.Red;
                    lblMessage.Text      = string.Format("We are sorry, you have reached the maximum amount of points you are allowed to log in a single day, regardless of how the points were earned. Please come back and and log them tomorrow.<br><br>");
                    return;
                }


                //// convert pages/minutes/etc. to points
                //var pc = new ProgramGamePointConversion();
                //pc.FetchByActivityId(PGID, int.Parse(rbActivityType.SelectedValue));
                //var points = Convert.ToInt32(intCount * pc.PointCount / pc.ActivityCount);

                sBadges = pa.AwardPointsToPatron(points, PointAwardReason.Reading,
                                                 0,
                                                 (ActivityType)pc.ActivityTypeId, intCount, txtAuthor.Text.Trim(), txtTitle.Text.Trim(), Review.Text.Trim());
            }
            #endregion

            #region Event Attendance
            // Logging event attendance
            if (txtCode.Length > 0)
            {
                // verify event code was not previously redeemed
                if (PatronPoints.HasRedeemedKeywordPoints(PID, txtCode))
                {
                    lblMessage.ForeColor = System.Drawing.Color.Red;
                    lblMessage.Text      = "This code has already been redeemend for this account.";
                    return;
                }

                // get event for that code, get the # points
                var ds = Event.GetEventByEventCode(pa.pgm.StartDate.ToShortDateString(),
                                                   DateTime.Now.ToShortDateString(), txtCode);
                if (ds.Tables[0].Rows.Count == 0)
                {
                    lblMessage.ForeColor = System.Drawing.Color.Red;
                    lblMessage.Text      = "This code is not valid.";
                    return;
                }
                var EID    = (int)ds.Tables[0].Rows[0]["EID"];
                var evt    = Event.GetEvent(EID);
                var points = evt.NumberPoints;
                //var newPBID = 0;

                if (evt.BadgeID != 0)
                {
                    sBadges = pa.AwardPointsToPatron(points, PointAwardReason.EventAttendance,
                                                     eventCode: txtCode, eventID: EID);
                }
            }
            #endregion

            var EndingPoints = PatronPoints.GetTotalPatronPoints(PID);

            // No need to announcve the badge award

            lblMessage.ForeColor = System.Drawing.Color.Green;
            lblMessage.Text      = (EndingPoints - StartingPoints).ToInt() + @" points have been added to the account!";

            txtAuthor.Text      = txtTitle.Text = txtCountSubmitted.Text = Review.Text = txtProgramCode.Text = "";
            btnSubmit.Visible   = false;
            btnReSubmit.Visible = true;
            EntryTable.Visible  = false;
        }
        protected void Page_Load(object sender, EventArgs e)
        {
            var pg = new Programs();
            var gm = new ProgramGame();
            var pp = 0;

            try {
                pg = Programs.FetchObject(int.Parse(Session["PatronProgramID"].ToString()));
                gm = ProgramGame.FetchObject(pg.ProgramGameID);
                pp = PatronPoints.GetTotalPatronPoints(((Patron)Session["Patron"]).PID);
            }
            catch
            {
                Response.Redirect("/images/game_map_icon.png");
            }

            var PID        = pg.PID;
            var numSquares = gm.BoardWidth;
            var width      = 800;
            var height     = 800;

            //var AID = 5;

            var squareSize = width / numSquares;

            width = height = squareSize * numSquares;

            var backImageFile   = Server.MapPath(GameBoardImage());
            var stampImageFile  = Server.MapPath(GameBoardStamp);
            var avatarImageFile = Server.MapPath(GameBoardAvatarStamp);

            var newBmp = new System.Drawing.Bitmap(width, height, System.Drawing.Imaging.PixelFormat.Format24bppRgb);

            System.Drawing.Image avatarImage = null;
            System.Drawing.Image stampImage  = null;;
            try
            {
                newBmp.SetResolution(72, 72);
                newBmp.MakeTransparent();
            }catch {}

            var newGraphic = System.Drawing.Graphics.FromImage(newBmp);

            try
            {
                newGraphic.SmoothingMode     = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
                newGraphic.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
                var backImage = System.Drawing.Image.FromFile(backImageFile);
                newGraphic.DrawImage(backImage, 0, 0, width, height);
            }
            catch { }

            try
            {
                avatarImage = System.Drawing.Image.FromFile(avatarImageFile);
            }
            catch { }
            try
            {
                stampImage = System.Drawing.Image.FromFile(stampImageFile);
            }
            catch { }
            // ----------------------------------------------
            if (Request["p"] != null)
            {
                int.TryParse(Request["p"].ToString(), out pp);
            }
            // -------------------------------------------
            var ds = ProgramGameLevel.GetAll(GetGame().PGID);


            var normalLevelTotalPoints = GetGameCompletionPoints(ds);
            var bonusLevelTotalPoints  = GetGameCompletionBonusPoints(ds);


            // in bonus levels if we have more points accumulated than the total normal level points
            var bonus = (pp > normalLevelTotalPoints);
            var rp    = pp; //remaining points

            if (bonus)
            {
                // if we are on the bonus, eliminate the "fully completed boards/levels) and then see what the remainder of the points is.
                rp = rp - normalLevelTotalPoints;
                rp = rp % bonusLevelTotalPoints;
            }
            var idx = 0;

            // ----------------------------------------------

            for (var i = 0; i < ds.Tables[0].Rows.Count; i++)
            {
                idx++;
                var multiplier  = (bonus ? GetGame().BonusLevelPointMultiplier : 1.00m);
                var levelPoints = Convert.ToInt32(Convert.ToInt32(ds.Tables[0].Rows[i]["PointNumber"]) * multiplier);
                //var levelTd = (Convert.ToInt32(ds.Tables[0].Rows[i]["LocationY"]) - 1) * GameBoardWidth +
                //              Convert.ToInt32(ds.Tables[0].Rows[i]["LocationX"]);
                var locX = Convert.ToInt32(ds.Tables[0].Rows[i]["LocationX"]) - 1;
                var locY = Convert.ToInt32(ds.Tables[0].Rows[i]["LocationY"]) - 1;
                rp = rp - levelPoints;
                if (rp < 0)
                {
                    //ret = string.Format("{0}\r\n$(\"#Td{1}\").html(\"<img src='{2}' class='BoardSquareImg'/>\");", ret, levelTd, GameBoardAvatarStamp);
                    if (avatarImage != null)
                    {
                        newGraphic.DrawImage(avatarImage, locX * squareSize, locY * squareSize, squareSize, squareSize);
                    }
                    break;
                }
                else
                {
                    //ret = string.Format("{0}\r\n$(\"#Td{1}\").html(\"<img src='{2}' class='BoardSquareImg'/>\");", ret, levelTd, GameBoardStamp);
                    if (stampImage != null)
                    {
                        newGraphic.DrawImage(stampImage, locX * squareSize, locY * squareSize, squareSize, squareSize);
                    }
                }
            }



            Response.ContentType = "image/png";
            //Response.AppendHeader("Content-Disposition", "attachment; filename=GameLevelStatsReportResults.xlsx");
            EnableViewState = false;
            newBmp.Save(Response.OutputStream, System.Drawing.Imaging.ImageFormat.Png);

            if (stampImage != null)
            {
                stampImage.Dispose();
            }
            if (avatarImage != null)
            {
                avatarImage.Dispose();
            }
            newGraphic.Dispose();
            newBmp.Dispose();
            Response.End();
        }
        protected void SubmitActivity()
        {
            var txtCount = readingActivityField.Text.Trim();
            var intCount = 0;

            if (txtCount.Length == 0 || !int.TryParse(txtCount, out intCount) || intCount < 0)
            {
                Session[SessionKey.PatronMessage]          = "You must enter how much you've read as a positive whole number.";
                Session[SessionKey.PatronMessageLevel]     = PatronMessageLevels.Danger;
                Session[SessionKey.PatronMessageGlyphicon] = "remove";
                return;
            }

            var selectedActivityType = activityTypeSelector.SelectedValue;

            // check that we aren't over the max
            int maxAmountForLogging = 0;

            switch (int.Parse(selectedActivityType))
            {
            case 0:
                maxAmountForLogging = SRPSettings.GetSettingValue("MaxBook").SafeToInt();
                break;

            case 1:
                maxAmountForLogging = SRPSettings.GetSettingValue("MaxPage").SafeToInt();
                break;

            //case 2: maxAmountForLogging = SRPSettings.GetSettingValue("MaxPar").SafeToInt();
            //    break;
            case 3:
                maxAmountForLogging = SRPSettings.GetSettingValue("MaxMin").SafeToInt();
                break;

            default:
                maxAmountForLogging = SRPSettings.GetSettingValue("MaxMin").SafeToInt();
                break;
            }
            if (intCount > maxAmountForLogging)
            {
                Session[SessionKey.PatronMessage] = string.Format("That's an awful lot of reading! You can only submit {0} {1} at a time.",
                                                                  maxAmountForLogging,
                                                                  ((ActivityType)int.Parse(selectedActivityType)).ToString());
                Session[SessionKey.PatronMessageLevel]     = PatronMessageLevels.Warning;
                Session[SessionKey.PatronMessageGlyphicon] = "exclamation-sign";
                return;
            }

            var patronId      = ((Patron)Session[SessionKey.Patron]).PID;
            var programGameId = int.Parse(ViewState["ProgramGameId"].ToString());

            var pa     = new AwardPoints(patronId);
            var points = 0;

            // convert pages/minutes/etc. to points
            var pc = new ProgramGamePointConversion();

            pc.FetchByActivityId(programGameId, int.Parse(activityTypeSelector.SelectedValue));
            // round up to ensure they get at least 1 point
            decimal computedPoints = intCount * pc.PointCount / pc.ActivityCount;

            points = (int)Math.Ceiling(computedPoints);

            // ensure they aren't over teh day total
            var allPointsToday            = PatronPoints.GetTotalPatronPoints(patronId, DateTime.Now);
            int maxPointsPerDayForLogging = SRPSettings.GetSettingValue("MaxPtsDay").SafeToInt();

            if (intCount + allPointsToday > maxPointsPerDayForLogging)
            {
                Session[SessionKey.PatronMessage]          = "Sorry but you have already reached the maximum amount of points that you can log in a day. Keep reading and come back tomorrow!";
                Session[SessionKey.PatronMessageLevel]     = PatronMessageLevels.Warning;
                Session[SessionKey.PatronMessageGlyphicon] = "exclamation-sign";
                return;
            }

            var earnedBadges = pa.AwardPointsToPatron(points: points,
                                                      reason: PointAwardReason.Reading,
                                                      MGID: 0,
                                                      readingActivity: (ActivityType)pc.ActivityTypeId,
                                                      readingAmount: intCount,
                                                      author: authorField.Text,
                                                      title: titleField.Text);

            // clear out the form
            var bookButton = activityTypeSelector.Items.Count == 1 &&
                             int.Parse(activityTypeSelector.Items[0].Value) == (int)ActivityType.Books;

            if (!bookButton)
            {
                readingActivityField.Text = string.Empty;
            }
            authorField.Text = string.Empty;
            titleField.Text  = string.Empty;

            // set message and earned badges
            string earnedMessage = new PointCalculation().EarnedMessage(earnedBadges, points);

            if (string.IsNullOrEmpty(earnedMessage))
            {
                Session[SessionKey.PatronMessage] = "<strong>Good job!</strong> Your reading activity has been logged.";
            }
            else
            {
                Session[SessionKey.PatronMessage] = string.Format("<strong>Good job!</strong> Your reading activity has been logged. <strong>{0}</strong>",
                                                                  earnedMessage);
            }
            Session[SessionKey.PatronMessageLevel]     = PatronMessageLevels.Success;
            Session[SessionKey.PatronMessageGlyphicon] = "thumbs-up";
            new SessionTools(Session).EarnedBadges(earnedBadges);
        }
Пример #14
0
        // points = 100
        // reason = PointAwardReason.MiniGameCompletion
        // MGID = Mini Game ID, if the reason is MiniGameCompletion, else 0
        //
        //
        // returns: a string based list of the badges they earned, or an empty string
        public string AwardPointsToPatron(int points, PointAwardReason reason,
                                          // Minigame
                                          int MGID = 0,
                                          // reading
                                          ActivityType readingActivity = ActivityType.Pages, int readingAmount = 0, string author = "", string title = "", string review = "",
                                          // event
                                          string eventCode = "", int eventID = 0,
                                          // book List
                                          int bookListID = 0,

                                          DateTime?forceDate = null
                                          )
        {
            if (forceDate != null)
            {
                now = (DateTime)forceDate;
            }

            string retValue = string.Empty;

            #region Reading - Log to PatronReadingLog
            PatronReadingLog rl = null;
            if (reason == PointAwardReason.Reading)
            {
                rl = new PatronReadingLog {
                    PID              = patron.PID,
                    ReadingType      = (int)readingActivity,
                    ReadingTypeLabel = (readingActivity).ToString(),
                    ReadingAmount    = readingAmount,
                    ReadingPoints    = points,
                    LoggingDate      = FormatHelper.ToNormalDate(now),
                    Author           = author.Trim(),
                    Title            = title.Trim(),
                    HasReview        = (review.Trim().Length > 0),
                    ReviewID         = 0
                };
                rl.Insert();

                // If there is a review, record the review
                if (review.Trim().Length > 0)
                {
                    var r = new PatronReview {
                        PID        = patron.PID,
                        PRLID      = rl.PRLID,
                        Author     = rl.Author,
                        Title      = rl.Title,
                        Review     = review.Trim(),
                        isApproved = false
                    };
                    r.Insert();

                    rl.ReviewID = r.PRID;
                    rl.Update();
                    HttpContext.Current.Session["LastPRID"] = r.PRID;
                }
            }
            #endregion

            #region Award PatronPoints

            var pp = new PatronPoints {
                PID                 = patron.PID,
                NumPoints           = points,
                AwardDate           = now,
                AwardReasonCd       = (int)reason,
                AwardReason         = PatronPoints.PointAwardReasonCdToDescription(reason),
                BadgeAwardedFlag    = false,
                isReading           = (reason == PointAwardReason.Reading),
                isEvent             = (reason == PointAwardReason.EventAttendance),
                isGameLevelActivity = (reason == PointAwardReason.MiniGameCompletion),
                isBookList          = (reason == PointAwardReason.BookListCompletion),
                isGame              = false,
                GameLevelActivityID = MGID,
                EventCode           = eventCode,
                EventID             = eventID,
                BookListID          = bookListID,
                LogID               = (rl == null ? 0 : rl.PRLID)
            };
            pp.Insert();

            var badgeAwarded = false;
            int badgeToAward = 0;               // <===========

            DAL.Minigame mg = null;
            if (reason == PointAwardReason.MiniGameCompletion)
            {
                mg           = DAL.Minigame.FetchObject(MGID);
                badgeAwarded = mg.AwardedBadgeID > 0;
                badgeToAward = mg.AwardedBadgeID;
            }
            if (reason == PointAwardReason.EventAttendance)
            {
                var evt = Event.GetEvent(eventID);
                badgeAwarded = evt == null ? false : evt.BadgeID > 0;
                badgeToAward = evt == null ? 0 : evt.BadgeID;
            }
            if (reason == PointAwardReason.BookListCompletion)
            {
                var bl = BookList.FetchObject(bookListID);
                ;
                badgeAwarded = (bl.AwardBadgeID > 0);
                badgeToAward = bl.AwardBadgeID;
            }

            DataSet pbds = null;
            if (badgeAwarded)
            {
                if (AwardBadgeToPatron(badgeToAward, patron, ref EarnedBadges))
                {
                    if (pp.PPID != 0)
                    {
                        pp.BadgeAwardedFlag = true;
                        pp.BadgeID          = badgeToAward;
                        pp.Update();
                    }
                }
            }

            #endregion

            #region If jumped level, award another badge(s)

            // since thay just earned points, check if they also advanced a level in the board game (if there is a board game for the program)
            EndingPoints = PatronPoints.GetTotalPatronPoints(patron.PID);
            EarnedBadge  = null;

            var earnedBadges2 = new List <Badge>();

            EarnedBadge = TallyPoints(patron, pgm, StartingPoints, EndingPoints, ref earnedBadges2);
            pbds        = PatronBadges.GetAll(patron.PID);

            foreach (var badge in earnedBadges2)
            {
                EarnedBadge = badge;

                if (EarnedBadge != null)
                {
                    AwardBadgeToPatron(EarnedBadge.BID, patron, ref EarnedBadges);
                }
            }

            #endregion

            #region Check and give awards if any

            AwardBadgeToPatronViaMatchingAwards(patron, ref EarnedBadges);

            #endregion

            #region Prepare return code
            // did they earn one or more badges?
            if (EarnedBadges.Count > 0)
            {
                retValue = string.Join("|", EarnedBadges.Select(b => b.BID).Distinct());
            }
            #endregion

            return(retValue);
        }
        // points = 100
        // reason = PointAwardReason.MiniGameCompletion
        // MGID = Mini Game ID, if the reason is MiniGameCompletion, else 0
        //
        //
        // returns: a string based list of the badges they earned, or an empty string
        public string AwardPointsToPatron(int points, PointAwardReason reason,
                                          // Minigame
                                          int MGID = 0,
                                          // reading
                                          ActivityType readingActivity = ActivityType.Pages, int readingAmount = 0, string author = "", string title = "", string review = "",
                                          // event
                                          string eventCode = "", int eventID = 0,
                                          // book List
                                          int bookListID = 0,

                                          DateTime?forceDate = null
                                          )
        {
            if (forceDate != null)
            {
                now = (DateTime)forceDate;
            }

            string retValue = "";

            #region Reading - Log to PatronReadingLog
            PatronReadingLog rl = null;
            if (reason == PointAwardReason.Reading)
            {
                rl = new PatronReadingLog
                {
                    PID              = patron.PID,
                    ReadingType      = (int)readingActivity,
                    ReadingTypeLabel = (readingActivity).ToString(),
                    ReadingAmount    = readingAmount,
                    ReadingPoints    = points,
                    LoggingDate      = FormatHelper.ToNormalDate(now),
                    Author           = author.Trim(),
                    Title            = title.Trim(),
                    HasReview        = (review.Trim().Length > 0),
                    ReviewID         = 0
                };
                rl.Insert();

                // If there is a review, record the review
                if (review.Trim().Length > 0)
                {
                    var r = new PatronReview
                    {
                        PID        = patron.PID,
                        PRLID      = rl.PRLID,
                        Author     = rl.Author,
                        Title      = rl.Title,
                        Review     = review.Trim(),
                        isApproved = false
                    };
                    r.Insert();

                    rl.ReviewID = r.PRID;
                    rl.Update();
                }
            }
            #endregion

            #region Award PatronPoints

            var pp = new PatronPoints
            {
                PID                 = patron.PID,
                NumPoints           = points,
                AwardDate           = now,
                AwardReasonCd       = (int)reason,
                AwardReason         = PatronPoints.PointAwardReasonCdToDescription(reason),
                BadgeAwardedFlag    = false,
                isReading           = (reason == PointAwardReason.Reading),
                isEvent             = (reason == PointAwardReason.EventAttendance),
                isGameLevelActivity = (reason == PointAwardReason.MiniGameCompletion),
                isBookList          = (reason == PointAwardReason.BookListCompletion),
                isGame              = false,
                GameLevelActivityID = MGID,
                EventCode           = eventCode,
                EventID             = eventID,
                BookListID          = bookListID,
                LogID               = (rl == null ? 0 : rl.PRLID)
            };
            pp.Insert();

            var badgeAwarded = false;
            int badgeToAward = 0;               // <===========

            DAL.Minigame mg = null;
            if (reason == PointAwardReason.MiniGameCompletion)
            {
                mg           = DAL.Minigame.FetchObject(MGID);
                badgeAwarded = mg.AwardedBadgeID > 0;
                badgeToAward = mg.AwardedBadgeID;
            }
            if (reason == PointAwardReason.EventAttendance)
            {
                var evt = Event.GetEvent(eventID);
                badgeAwarded = evt.BadgeID > 0;
                badgeToAward = evt.BadgeID;
            }
            if (reason == PointAwardReason.BookListCompletion)
            {
                var bl = BookList.FetchObject(bookListID);;
                badgeAwarded = (bl.AwardBadgeID > 0);
                badgeToAward = bl.AwardBadgeID;
            }

            DataSet pbds = null;
            //DataTable newTable = null;
            if (badgeAwarded)
            {
                if (AwardBadgeToPatron(badgeToAward, patron, ref EarnedBadges))
                {
                    if (pp.PPID != 0)
                    {
                        pp.BadgeAwardedFlag = true;
                        pp.BadgeID          = badgeToAward;
                        pp.Update();
                    }
                }
                #region AwardBadgeToPatron code
                //// check if badge was already earned...
                //pbds = PatronBadges.GetAll(patron.PID);
                //var a = pbds.Tables[0].AsEnumerable().Where(r => r.Field<int>("BadgeID") == badgeToAward);

                //newTable = new DataTable();
                //try { newTable = a.CopyToDataTable(); } catch { }

                //// badge not found, award it!
                //if (newTable.Rows.Count == 0)
                //{
                //    var pb = new PatronBadges { BadgeID = badgeToAward, DateEarned = now, PID = patron.PID };
                //    pb.Insert();

                //    EarnedBadge = Badge.GetBadge(badgeToAward);
                //    EarnedBadges.Add(EarnedBadge);

                //    //if badge generates notification, then generate the notification
                //    if (EarnedBadge.GenNotificationFlag)
                //    {
                //        var not = new Notifications
                //        {
                //            PID_To = patron.PID,
                //            PID_From = 0,  //0 == System Notification
                //            Subject = EarnedBadge.NotificationSubject,
                //            Body = EarnedBadge.NotificationBody,
                //            isQuestion = false,
                //            AddedDate = now,
                //            LastModDate = now,
                //            AddedUser = patron.Username,
                //            LastModUser = "******"
                //        };
                //        not.Insert();
                //    }

                //    //if badge generates prize, then generate the prize
                //    if (EarnedBadge.IncludesPhysicalPrizeFlag)
                //    {
                //        var ppp = new DAL.PatronPrizes
                //                      {
                //                          PID = patron.PID,
                //                          PrizeSource = 1,
                //                          PrizeName = EarnedBadge.PhysicalPrizeName,
                //                          RedeemedFlag = false,
                //                          AddedUser = patron.Username,
                //                          LastModUser = "******",
                //                          AddedDate = now,
                //                          LastModDate = now
                //                      };

                //        ppp.Insert();
                //    }



                //    // if badge generates award code, then generate the code
                //    if (EarnedBadge.AssignProgramPrizeCode)
                //    {
                //        var RewardCode = "";
                //        // get the Code value
                //        // save the code value for the patron
                //        RewardCode = ProgramCodes.AssignCodeForPatron(patron.ProgID, patron.ProgID);

                //        // generate the notification
                //        var not = new Notifications
                //        {
                //            PID_To = patron.PID,
                //            PID_From = 0,  //0 == System Notification
                //            Subject = EarnedBadge.PCNotificationSubject,
                //            Body = EarnedBadge.PCNotificationBody.Replace("{ProgramRewardCode}", RewardCode),
                //            isQuestion = false,
                //            AddedDate = now,
                //            LastModDate = now,
                //            AddedUser = patron.Username,
                //            LastModUser = "******"
                //        };
                //        not.Insert();
                //    }

                //    if (pp.PPID != 0)
                //    {
                //        pp.BadgeAwardedFlag = true;
                //        pp.BadgeID = badgeToAward;
                //        pp.Update();
                //    }
                //}
                #endregion
            }

            #endregion

            #region If jumped level, award another badge(s)

            // since thay just earned points, check if they also advanced a level in the board game (if there is a board game for the program)
            EndingPoints = PatronPoints.GetTotalPatronPoints(patron.PID);
            EarnedBadge  = null;

            var earnedBadges2 = new List <Badge>();

            EarnedBadge = TallyPoints(patron, pgm, StartingPoints, EndingPoints, ref earnedBadges2);
            pbds        = PatronBadges.GetAll(patron.PID);

            foreach (var badge in earnedBadges2)
            {
                EarnedBadge = badge;

                if (EarnedBadge != null)
                {
                    AwardBadgeToPatron(EarnedBadge.BID, patron, ref EarnedBadges);
                }

                #region AwardBadgeToPatron call2
                //// check if badge was already earned...
                //if (EarnedBadge != null)
                //{
                //    var aa = pbds.Tables[0].AsEnumerable().Where(r => r.Field<int>("BadgeID") == badgeToAward);

                //    newTable = new DataTable();
                //    try { newTable = aa.CopyToDataTable(); }
                //    catch { }

                //    // badge not found, award it!
                //}
                //if (EarnedBadge != null && newTable != null && newTable.Rows.Count == 0)
                //{
                //    // Award the badge

                //    EarnedBadges.Add(badge);  // Add badge tot he list used to display to user ...

                //    var newPBID = 0;
                //    var pb = new PatronBadges { BadgeID = EarnedBadge.BID, DateEarned = now, PID = patron.PID };
                //    pb.Insert();
                //    newPBID = pb.PBID;

                //    //if badge generates notification, then generate the notification
                //    if (EarnedBadge.GenNotificationFlag)
                //    {
                //        var not = new Notifications
                //        {
                //            PID_To = patron.PID,
                //            PID_From = 0,  //0 == System Notification
                //            Subject = EarnedBadge.NotificationSubject,
                //            Body = EarnedBadge.NotificationBody,
                //            isQuestion = false,
                //            AddedDate = now,
                //            LastModDate = now,
                //            AddedUser = patron.Username,
                //            LastModUser = "******"
                //        };
                //        not.Insert();
                //    }

                //    //if badge generates prize, then generate the prize
                //    if (EarnedBadge.IncludesPhysicalPrizeFlag)
                //    {
                //        var ppp = new DAL.PatronPrizes
                //        {
                //            PID = patron.PID,
                //            PrizeSource = 1,
                //            PrizeName = EarnedBadge.PhysicalPrizeName,
                //            RedeemedFlag = false,
                //            AddedUser = patron.Username,
                //            LastModUser = "******",
                //            AddedDate = now,
                //            LastModDate = now
                //        };

                //        ppp.Insert();
                //    }

                //    // if badge generates award code, then generate the code
                //    if (EarnedBadge.AssignProgramPrizeCode)
                //    {
                //        var RewardCode = "";
                //        // get the Code value
                //        // save the code value for the patron
                //        RewardCode = ProgramCodes.AssignCodeForPatron(patron.ProgID, patron.ProgID);

                //        // generate the notification
                //        var not = new Notifications
                //        {
                //            PID_To = patron.PID,
                //            PID_From = 0,  //0 == System Notification
                //            Subject = EarnedBadge.PCNotificationSubject,
                //            Body = EarnedBadge.PCNotificationBody.Replace("{ProgramRewardCode}", RewardCode),
                //            isQuestion = false,
                //            AddedDate = now,
                //            LastModDate = now,
                //            AddedUser = patron.Username,
                //            LastModUser = "******"
                //        };
                //        not.Insert();
                //    }
                //}
                #endregion
            }

            #region deprecated - replaced by abbility to earn multiple badges above
            //EarnedBadge = TallyPoints(patron, pgm, StartingPoints, EndingPoints, ref EarnedBadges);

            //// check if badge was already earned...
            //if (EarnedBadge != null) {
            //    pbds = PatronBadges.GetAll(patron.PID);
            //    var aa = pbds.Tables[0].AsEnumerable().Where(r => r.Field<int>("BadgeID") == badgeToAward);

            //    newTable = new DataTable();
            //    try { newTable = aa.CopyToDataTable(); } catch { }

            //    // badge not found, award it!
            //}
            //if (EarnedBadge != null && newTable!= null && newTable.Rows.Count == 0)
            //{
            //    // Award the badge
            //    var newPBID = 0;
            //    var pb = new PatronBadges { BadgeID = EarnedBadge.BID, DateEarned = now, PID = patron.PID };
            //    pb.Insert();
            //    newPBID = pb.PBID;

            //    //if badge generates notification, then generate the notification
            //    if (EarnedBadge.GenNotificationFlag)
            //    {
            //        var not = new Notifications
            //        {
            //            PID_To = patron.PID,
            //            PID_From = 0,  //0 == System Notification
            //            Subject = EarnedBadge.NotificationSubject,
            //            Body = EarnedBadge.NotificationBody,
            //            isQuestion = false,
            //            AddedDate = now,
            //            LastModDate = now,
            //            AddedUser = patron.Username,
            //            LastModUser = "******"
            //        };
            //        not.Insert();
            //    }

            //    //if badge generates prize, then generate the prize
            //    if (EarnedBadge.IncludesPhysicalPrizeFlag)
            //    {
            //        var ppp = new DAL.PatronPrizes
            //        {
            //            PID = patron.PID,
            //            PrizeSource = 1,
            //            PrizeName = EarnedBadge.PhysicalPrizeName,
            //            RedeemedFlag = false,
            //            AddedUser = patron.Username,
            //            LastModUser = "******",
            //            AddedDate = now,
            //            LastModDate = now
            //        };

            //        ppp.Insert();
            //    }

            //    // if badge generates award code, then generate the code
            //    if (EarnedBadge.AssignProgramPrizeCode)
            //    {
            //        var RewardCode = "";
            //        // get the Code value
            //        // save the code value for the patron
            //        RewardCode = ProgramCodes.AssignCodeForPatron(patron.ProgID, patron.ProgID);

            //        // generate the notification
            //        var not = new Notifications
            //        {
            //            PID_To = patron.PID,
            //            PID_From = 0,  //0 == System Notification
            //            Subject = EarnedBadge.PCNotificationSubject,
            //            Body = EarnedBadge.PCNotificationBody.Replace("{ProgramRewardCode}", RewardCode),
            //            isQuestion = false,
            //            AddedDate = now,
            //            LastModDate = now,
            //            AddedUser = patron.Username,
            //            LastModUser = "******"
            //        };
            //        not.Insert();
            //    }
            #endregion


            #endregion

            #region Check and give awards if any

            AwardBadgeToPatronViaMatchingAwards(patron, ref EarnedBadges);

            #endregion

            #region Prepare return code
            // did they earn one or more badges?
            if (EarnedBadges.Count > 0)
            {
                var badges = EarnedBadges.Count.ToString();
                //foreach(Badge b in EarnedBadges)
                //{
                //    badges = badges + "|" + b.BID.ToString();
                //}
                badges = EarnedBadges.Aggregate(badges, (current, b) => current + "|" + b.BID.ToString());
                //Response.Redirect("~/BadgeAward.aspx?b=" + badges);
                retValue = badges;
            }
            #endregion

            return(retValue);
        }