async Task UserDetailViewModel_PropertyChangedAsync(object sender, PropertyChangedEventArgs e)
        {
            Console.WriteLine("Property " + e.PropertyName + " changed");
            switch (e.PropertyName)
            {
            case "Email":
            {
                EmailErrors.Clear();
                var Errors = await GetEmailErrors(Email);

                EmailErrors.AddRange <string>(Errors);
                useEmailErrors?.Invoke(Errors);
            }
            break;

            case "Password":
            {
                PasswordErrors.Clear();
                var Errors = GetPasswordErrors(Password);
                PasswordErrors.AddRange <string>(Errors);
                usePasswordErrors?.Invoke(Errors);
            }
            break;

            case "ConfirmPassword":
            {
                ConfirmPasswordErrors.Clear();
                var Errors = GetConfirmPasswordErrors(Password, ConfirmPassword);
                ConfirmPasswordErrors.AddRange <string>(Errors);
                useConfirmPasswordErrors?.Invoke(Errors);
            }
            break;
            }
        }
Esempio n. 2
0
        //----------------------------User requested access-----------------------------------
        public bool requestAdminPrivileges(bool didUserRequestAccess, string username, string password)
        {
            try
            {
                if (didUserRequestAccess == true)
                {
                    //Get Connection String
                    var    configuration    = GetConfiguration();
                    string connectionString = configuration.GetConnectionString("AWSMAINDB");

                    //Update table that user requested access
                    using (MySqlConnection conn = new MySqlConnection(connectionString))
                    {
                        conn.Open();
                        MySqlCommand cmd = new MySqlCommand("UPDATE loginTable SET didUserRequestPrivileges = 'true' WHERE username = @username AND usersPassword = @usersPassword", conn);
                        cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value     = username;
                        cmd.Parameters.Add("usersPassword", MySqlDbType.VarChar).Value = password;
                        cmd.ExecuteNonQuery();
                    }

                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception e)
            {
                EmailErrors errors = new EmailErrors();
                errors.autoEmailDeveloperAboutIssue("adminFunction.cs", "requestAdminPrivileges", e.ToString());
                return(false);
            }
        }
Esempio n. 3
0
        //----------------------------Get questions for test-----------------------------------
        public List <TakeATestModel> getTestQuestions(string username, string password, string courseID)
        {
            try
            {
                //Declare variables
                List <TakeATestModel> testModel = new List <TakeATestModel>();

                //Get Connection String
                var    configuration    = GetConfiguration();
                string connectionString = configuration.GetConnectionString("AWSMAINDB");

                //Open connection
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    //Confirm user is authorized to take this course
                    MySqlCommand cmdUserAuth = new MySqlCommand("SELECT COUNT(*) FROM loginTable INNER JOIN assignedCoursesTable ON assignedCoursesTable.assignedToID = @username WHERE username = @username AND userspassword = @password AND assignedCoursesTable.courseID = @courseID", conn);
                    cmdUserAuth.Parameters.Add("@username", MySqlDbType.VarChar).Value = username;
                    cmdUserAuth.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;
                    cmdUserAuth.Parameters.Add("@courseID", MySqlDbType.VarChar).Value = courseID;
                    if (int.Parse(cmdUserAuth.ExecuteScalar().ToString()) > 0)
                    {
                        MySqlCommand cmd = new MySqlCommand("SELECT * FROM coursesTestQuestionsTable WHERE testID = @courseID", conn);
                        cmd.Parameters.Add("@courseID", MySqlDbType.VarChar).Value = courseID;
                        MySqlDataReader reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            //Populate testModel with test questions
                            testModel.Add(new TakeATestModel()
                            {
                                testID                 = reader["testID"].ToString(),
                                questionNumber         = int.Parse(reader["questionNumber"].ToString()),
                                question               = reader["question"].ToString(),
                                answerOption1          = reader["answerOption1"].ToString(),
                                answerOption2          = reader["answerOption2"].ToString(),
                                answerOption3          = reader["answerOption3"].ToString(),
                                answerOption4          = reader["answerOption4"].ToString(),
                                isAnswerOption1Correct = reader["isAnswerOption1Correct"].ToString(),
                                isAnswerOption2Correct = reader["isAnswerOption2Correct"].ToString(),
                                isAnswerOption3Correct = reader["isAnswerOption3Correct"].ToString(),
                                isAnswerOption4Correct = reader["isAnswerOption4Correct"].ToString()
                            });
                        }
                        return(testModel);
                    }
                    else
                    {
                        return(null);
                    }
                }
            }
            catch (Exception e)
            {
                EmailErrors emailerrors = new EmailErrors();
                emailerrors.autoEmailDeveloperAboutIssue("takeATestFuctions.cs", "getTestQuestions", e.ToString());
                return(null);
            }
        }
Esempio n. 4
0
 static Errors()
 {
     AccountErrors     = new AccountErrors();
     MaintenanceErrors = new MaintenanceErrors();
     DatabaseErrors    = new DatabaseErrors();
     UserCreatorErrors = new UserCreatorErrors();
     AuthErrors        = new AuthErrors();
     EmailErrors       = new EmailErrors();
     LogErrors         = new LogErrors();
 }
Esempio n. 5
0
        //-------------------------------Check if user has admin priveleges ----------------------------
        public AdminModel checkAdminPrivileges(string username, string password)
        {
            try
            {
                //variable
                AdminModel adminmodel = new AdminModel();
                //Get Connection String
                var    configuration    = GetConfiguration();
                string connectionString = configuration.GetConnectionString("AWSMAINDB");

                //Open Sql connection
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand("SELECT * FROM loginTable WHERE username = @username AND usersPassword = @password", conn);
                    cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = username;
                    cmd.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;

                    MySqlDataReader reader = cmd.ExecuteReader();
                    //Check users admin privileges
                    while (reader.Read())
                    {
                        //Check access
                        if (reader["adminPrivileges"].ToString() == "true")
                        {
                            adminmodel.doesUserHaveAdminPrivileges = true;
                        }
                        else
                        {
                            adminmodel.doesUserHaveAdminPrivileges = false;
                        }

                        //Check if requested access
                        if (reader["didUserRequestPrivileges"].ToString() == "true")
                        {
                            adminmodel.didUserRequestAdminPrivileges = true;
                        }
                        else
                        {
                            adminmodel.didUserRequestAdminPrivileges = false;
                        }
                    }
                    return(adminmodel);
                }
            }
            catch (Exception e)
            {
                //If error email the developer
                EmailErrors emailerrors = new EmailErrors();
                emailerrors.autoEmailDeveloperAboutIssue("Admin Functions", "checkAdminPrileges", e.ToString());
                return(null);
            }
        }
Esempio n. 6
0
        //----------------------------Populate admin model-------------------------------
        public AdminModel populateAdminModel(string username, string password)
        {
            try
            {
                //Variables
                AdminModel    adminmodel  = new AdminModel();
                List <string> usernames   = new List <string>();
                List <string> coursenames = new List <string>();

                //Get Connection String
                var    configuration    = GetConfiguration();
                string connectionString = configuration.GetConnectionString("AWSMAINDB");

                //Open Sql connection
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    MySqlCommand    cmd    = new MySqlCommand("SELECT * FROM loginTable ORDER BY username ASC", conn);
                    MySqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        usernames.Add(reader["username"].ToString());
                    }
                    reader.Close();

                    MySqlCommand cmd2 = new MySqlCommand("SELECT * FROM coursesTable", conn);
                    reader = cmd2.ExecuteReader();
                    while (reader.Read())
                    {
                        coursenames.Add(reader["courseTitle"].ToString());
                    }
                }

                //Check admin priv with existing function
                adminmodel.didUserRequestAdminPrivileges = checkAdminPrivileges(username, password).didUserRequestAdminPrivileges;
                adminmodel.doesUserHaveAdminPrivileges   = checkAdminPrivileges(username, password).doesUserHaveAdminPrivileges;
                //populate model with existing lists
                adminmodel.allUsernames   = usernames;
                adminmodel.allCourseNames = coursenames;
                //Return model
                return(adminmodel);
            }
            catch (Exception e)
            {
                EmailErrors emailErrors = new EmailErrors();
                emailErrors.autoEmailDeveloperAboutIssue("adminFunctions.cs", "populateAdminModel", e.ToString());
                return(null);
            }
        }
Esempio n. 7
0
        //--------------------------Retrieve users report-----------------------
        public List <RetrieveUsersReportModel> retrieveUsersReport(string username)
        {
            //Get Connection String
            var    configuration    = GetConfiguration();
            string connectionString = configuration.GetConnectionString("AWSMAINDB");

            //Declare variables
            List <RetrieveUsersReportModel> retrieveUsersReportModel = new List <RetrieveUsersReportModel>();

            //Open Sql connection
            using (MySqlConnection conn = new MySqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand("SELECT * FROM testScoringTable WHERE LOWER(assignedTo) = @assignedTo", conn);
                    cmd.Parameters.Add("@assignedTo", MySqlDbType.VarChar).Value = username.ToLower();
                    MySqlDataReader reader = cmd.ExecuteReader();

                    //Populate variables
                    while (reader.Read())
                    {
                        retrieveUsersReportModel.Add(new RetrieveUsersReportModel
                        {
                            courseName   = reader["courseName"].ToString(),
                            assignedBy   = reader["assignedBy"].ToString(),
                            dateAssigned = reader["dateAssigned"].ToString(),
                            dateTaken    = reader["dateTaken"].ToString(),
                            grade        = (int.Parse(reader["grade"].ToString()))
                        });
                    }

                    return(retrieveUsersReportModel);
                }
                catch (Exception e)
                {
                    EmailErrors error = new EmailErrors();
                    error.autoEmailDeveloperAboutIssue("adminFunctions.cs", "retrieveUserReports", e.ToString());
                    return(null);
                }
            }
        }
Esempio n. 8
0
        //-------------------------------Get current assigned courses----------------------------
        public List <getAssignedCoursesModel> getCurrentAssignedCourses(string username)
        {
            try
            {
                //Declare variable
                List <getAssignedCoursesModel> getAssignedCourses = new List <getAssignedCoursesModel>();

                //Get Connection String
                var    configuration    = GetConfiguration();
                string connectionString = configuration.GetConnectionString("AWSMAINDB");

                //Get data
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand("SELECT * FROM assignedCoursesTable WHERE assignedToID = @username", conn);
                    cmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = username;
                    MySqlDataReader reader = cmd.ExecuteReader();
                    while (reader.Read())
                    {
                        getAssignedCourses.Add(new getAssignedCoursesModel
                        {
                            assignedByID = reader["assignedByID"].ToString(),
                            assignedtoID = reader["assignedToID"].ToString(),
                            courseID     = reader["courseID"].ToString()
                        });
                    }
                    return(getAssignedCourses);
                }
            }
            catch (Exception e)
            {
                EmailErrors errors = new EmailErrors();
                errors.autoEmailDeveloperAboutIssue("GetAssignedCourses.cs", "getCurrentAssignedCourses", e.ToString());
                return(null);
            }
        }
Esempio n. 9
0
        //---------------------Populate model with course content data--------------------------
        public Models.CourseContentModel populateCourseContentModel(string username, string password, string courseID)
        {
            try
            {
                //Get Connection String
                var    configuration    = GetConfiguration();
                string connectionString = configuration.GetConnectionString("AWSMAINDB");

                //Declare variables
                Models.CourseContentModel coursecontentmodel = new Models.CourseContentModel();
                coursecontentmodel.videoLinks     = new List <string>();
                coursecontentmodel.webAndPDFLinks = new List <string>();

                //Open connection
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    //Confirm user is authorized to take this course
                    MySqlCommand cmdUserAuth = new MySqlCommand("SELECT COUNT(*) FROM loginTable INNER JOIN assignedCoursesTable ON assignedCoursesTable.assignedToID = @username WHERE username = @username AND userspassword = @password AND assignedCoursesTable.courseID = @courseID", conn);
                    cmdUserAuth.Parameters.Add("@username", MySqlDbType.VarChar).Value = username;
                    cmdUserAuth.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;
                    cmdUserAuth.Parameters.Add("@courseID", MySqlDbType.VarChar).Value = courseID;
                    if (int.Parse(cmdUserAuth.ExecuteScalar().ToString()) > 0)
                    {
                        //Get all course content
                        MySqlCommand cmd = new MySqlCommand("SELECT * FROM coursesContentTable INNER JOIN coursesTable ON coursesContentTable.testID = coursesTable.courseTitle WHERE coursesContentTable.testID = @courseID", conn);
                        cmd.Parameters.Add("@courseID", MySqlDbType.VarChar).Value = courseID;
                        MySqlDataReader reader = cmd.ExecuteReader();

                        //Loop through all course content in course. Assign to model
                        while (reader.Read())
                        {
                            coursecontentmodel.courseTitle      = reader["testID"].ToString();
                            coursecontentmodel.difficultyRating = reader["difficultyRating"].ToString();
                            if (reader["linkType"].ToString() == "Video")
                            {
                                coursecontentmodel.videoLinks.Add(reader["linkAddress"].ToString());
                            }
                            else
                            {
                                coursecontentmodel.webAndPDFLinks.Add(reader["linkAddress"].ToString());
                            }
                            coursecontentmodel.notes = reader["notes"].ToString();
                        }

                        return(coursecontentmodel);
                    }
                    //If user is not assigned to course
                    else
                    {
                        return(null);
                    }
                }
            }
            catch (Exception e)
            {
                EmailErrors errors = new EmailErrors();
                errors.autoEmailDeveloperAboutIssue("courseContent.cs", "populateCourseContentModel", e.ToString());
                return(null);
            }
        }
Esempio n. 10
0
        //---------------------------Assign Courses---------------------------------------
        public bool assignCourses(assignCourseModel[] assigncoursesmodel, string adminFirstname, string adminLastname)
        {
            try
            {
                //Get Connection String
                var    configuration    = GetConfiguration();
                string connectionString = configuration.GetConnectionString("AWSMAINDB");

                //create variables
                List <string> users   = new List <string>();
                List <string> courses = new List <string>();

                //Populate variables
                foreach (assignCourseModel objectModel in assigncoursesmodel)
                {
                    if (objectModel.user != null)
                    {
                        users.Add(objectModel.user);
                    }
                    if (objectModel.course != null)
                    {
                        courses.Add(objectModel.course);
                    }
                }

                //Push data to database
                foreach (string user in users)
                {
                    foreach (string course in courses)
                    {
                        //Create security verification variable.
                        bool isOkToAssignCourse = true;



                        using (MySqlConnection conn = new MySqlConnection(connectionString))
                        {
                            conn.Open();

                            //Verify user exists
                            MySqlCommand cmd1 = new MySqlCommand("SELECT COUNT(*) FROM loginTable WHERE username = @username", conn);
                            cmd1.Parameters.Add("@username", MySqlDbType.VarChar).Value = user;
                            if (int.Parse(cmd1.ExecuteScalar().ToString()) != 1)
                            {
                                isOkToAssignCourse = false;
                            }

                            //Verify course exists
                            MySqlCommand cmd2 = new MySqlCommand("SELECT COUNT(*) FROM coursesTable WHERE courseTitle = @courseTitle", conn);
                            cmd2.Parameters.Add("@courseTitle", MySqlDbType.VarChar).Value = course;
                            if (int.Parse(cmd2.ExecuteScalar().ToString()) != 1)
                            {
                                isOkToAssignCourse = false;
                            }

                            //Check user isn't already assigned to course
                            MySqlCommand cmd3 = new MySqlCommand("SELECT COUNT(*) FROM assignedCoursesTable WHERE assignedToID = @assignedToID AND courseID = @courseID", conn);
                            cmd3.Parameters.Add("@assignedToID", MySqlDbType.VarChar).Value = user;
                            cmd3.Parameters.Add("@courseID", MySqlDbType.VarChar).Value     = course;
                            if (int.Parse(cmd3.ExecuteScalar().ToString()) > 0)
                            {
                                isOkToAssignCourse = false;
                            }

                            //If all verification checks pass assign course to user
                            if (isOkToAssignCourse == true)
                            {
                                MySqlCommand cmd4 = new MySqlCommand("INSERT INTO assignedCoursesTable (assignedByID, assignedToID, courseID) VALUES (@assignedByID, @assignedToID, @courseID)", conn);
                                cmd4.Parameters.Add("@assignedByID", MySqlDbType.VarChar).Value = adminFirstname + " " + adminLastname;
                                cmd4.Parameters.Add("@assignedToID", MySqlDbType.VarChar).Value = user;
                                cmd4.Parameters.Add("@courseID", MySqlDbType.VarChar).Value     = course;
                                cmd4.ExecuteNonQuery();
                            }
                        }
                    }
                }

                return(true);
            }
            catch (Exception e)
            {
                EmailErrors emailerrors = new EmailErrors();
                emailerrors.autoEmailDeveloperAboutIssue("adminFunction.cs", "assignCourses", e.ToString());
                return(false);
            }
        }
Esempio n. 11
0
        //---------------------------Submit New Course---------------------------------------
        public bool submitNewCourse(createACourseModel[] createACourseModel)
        {
            //Create variables
            List <string> links            = new List <string>();
            List <string> linkTypes        = new List <string>();
            List <string> questions        = new List <string>();
            List <string> option1          = new List <string>();
            List <string> option2          = new List <string>();
            List <string> option3          = new List <string>();
            List <string> option4          = new List <string>();
            List <string> isOption1Correct = new List <string>();
            List <string> isOption2Correct = new List <string>();
            List <string> isOption3Correct = new List <string>();
            List <string> isOption4Correct = new List <string>();

            //Populate Links
            foreach (createACourseModel courseModel in createACourseModel)
            {
                if (courseModel.link != null)
                {
                    links.Add(courseModel.link);
                }
            }

            //Populate Link Types
            foreach (createACourseModel courseModel in createACourseModel)
            {
                if (courseModel.linkType != null)
                {
                    linkTypes.Add(courseModel.linkType);
                }
            }

            //Populate question data
            foreach (createACourseModel courseModel in createACourseModel)
            {
                if (courseModel.question != null)
                {
                    questions.Add(courseModel.question);
                    option1.Add(courseModel.option1);
                    option2.Add(courseModel.option2);
                    option3.Add(courseModel.option3);
                    option4.Add(courseModel.option4);
                    isOption1Correct.Add(courseModel.isOptionCorrectOrIncorrect1);
                    isOption2Correct.Add(courseModel.isOptionCorrectOrIncorrect2);
                    isOption3Correct.Add(courseModel.isOptionCorrectOrIncorrect3);
                    isOption4Correct.Add(courseModel.isOptionCorrectOrIncorrect4);
                }
            }


            try
            {
                //Get Connection String
                var    configuration    = GetConfiguration();
                string connectionString = configuration.GetConnectionString("AWSMAINDB");

                //Insert course name & difficulty rating
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand("INSERT INTO coursesTable (courseTitle, difficultyRating, notes) VALUES (@courseTitle,@difficultyRating, @notes) ", conn);
                    cmd.Parameters.Add("@difficultyRating", MySqlDbType.VarChar).Value = createACourseModel[1].difficultyRating;
                    cmd.Parameters.Add("@courseTitle", MySqlDbType.VarChar).Value      = createACourseModel[2].courseName;
                    cmd.Parameters.Add("@notes", MySqlDbType.VarChar).Value            = createACourseModel[3].notes;
                    cmd.ExecuteNonQuery();
                }

                //Insert Links
                int iterator = 0;
                foreach (string link in links)
                {
                    using (MySqlConnection conn = new MySqlConnection(connectionString))
                    {
                        conn.Open();
                        MySqlCommand cmd = new MySqlCommand("INSERT INTO coursesContentTable (testID, linkAddress, linkType) VALUES (@testID ,@linkAddress, @linkType) ", conn);
                        cmd.Parameters.Add("@testID", MySqlDbType.VarChar).Value      = createACourseModel[2].courseName;
                        cmd.Parameters.Add("@linkAddress", MySqlDbType.VarChar).Value = link;
                        cmd.Parameters.Add("@linkType", MySqlDbType.VarChar).Value    = linkTypes[iterator];
                        cmd.ExecuteNonQuery();
                        iterator++;
                    }
                }

                //Insert Questions
                iterator = 0;
                foreach (string question in questions)
                {
                    using (MySqlConnection conn = new MySqlConnection(connectionString))
                    {
                        conn.Open();
                        MySqlCommand cmd = new MySqlCommand("INSERT INTO coursesTestQuestionsTable (testID, questionNumber, question, answerOption1, answerOption2, answerOption3, answerOption4, isAnswerOption1Correct, isAnswerOption2Correct, isAnswerOption3Correct, isAnswerOption4Correct) VALUES (@testID ,@questionNumber, @question, @answerOption1, @answerOption2, @answerOption3, @answerOption4, @isAnswerOption1Correct, @isAnswerOption2Correct, @isAnswerOption3Correct, @isAnswerOption4Correct) ", conn);
                        cmd.Parameters.Add("@testID", MySqlDbType.VarChar).Value                 = createACourseModel[2].courseName;
                        cmd.Parameters.Add("@questionNumber", MySqlDbType.VarChar).Value         = iterator + 1;
                        cmd.Parameters.Add("@question", MySqlDbType.VarChar).Value               = question;
                        cmd.Parameters.Add("@answerOption1", MySqlDbType.VarChar).Value          = option1[iterator];
                        cmd.Parameters.Add("@answerOption2", MySqlDbType.VarChar).Value          = option2[iterator];
                        cmd.Parameters.Add("@answerOption3", MySqlDbType.VarChar).Value          = option3[iterator];
                        cmd.Parameters.Add("@answerOption4", MySqlDbType.VarChar).Value          = option4[iterator];
                        cmd.Parameters.Add("@isAnswerOption1Correct", MySqlDbType.VarChar).Value = isOption1Correct[iterator];
                        cmd.Parameters.Add("@isAnswerOption2Correct", MySqlDbType.VarChar).Value = isOption2Correct[iterator];
                        cmd.Parameters.Add("@isAnswerOption3Correct", MySqlDbType.VarChar).Value = isOption3Correct[iterator];
                        cmd.Parameters.Add("@isAnswerOption4Correct", MySqlDbType.VarChar).Value = isOption4Correct[iterator];
                        cmd.ExecuteNonQuery();
                        iterator++;
                    }
                }

                return(true);
            }
            catch (Exception e)
            {
                EmailErrors emailerrors = new EmailErrors();
                emailerrors.autoEmailDeveloperAboutIssue("adminFunctions.cs", "submitNewCourse", e.ToString());
                return(false);
            }
        }
Esempio n. 12
0
        //-------------------------------Grade users test----------------------------------------------
        public string gradeTest(string username, string password, string courseID, string[] answers)
        {
            try
            {
                //Declare variables
                double   totalQuestions = 0;
                double   correctAnswers = 0;
                int      i = 0;
                bool     wasAnswerCorrect  = false;
                DateTime assigedCourseDate = new DateTime();
                string   assignedBy        = "";
                int      totalScore        = 0;

                //Get Connection String
                var    configuration    = GetConfiguration();
                string connectionString = configuration.GetConnectionString("AWSMAINDB");

                //Open connection
                using (MySqlConnection conn = new MySqlConnection(connectionString))
                {
                    conn.Open();
                    //Confirm user is authorized to take this course
                    MySqlCommand cmdUserAuth = new MySqlCommand("SELECT COUNT(*) FROM loginTable INNER JOIN assignedCoursesTable ON assignedCoursesTable.assignedToID = @username WHERE username = @username AND userspassword = @password AND assignedCoursesTable.courseID = @courseID", conn);
                    cmdUserAuth.Parameters.Add("@username", MySqlDbType.VarChar).Value = username;
                    cmdUserAuth.Parameters.Add("@password", MySqlDbType.VarChar).Value = password;
                    cmdUserAuth.Parameters.Add("@courseID", MySqlDbType.VarChar).Value = courseID;
                    if (int.Parse(cmdUserAuth.ExecuteScalar().ToString()) > 0)
                    {
                        MySqlCommand cmd = new MySqlCommand("SELECT * FROM coursesTestQuestionsTable WHERE testID = @testID", conn);
                        cmd.Parameters.Add("@testID", MySqlDbType.VarChar).Value = courseID;
                        MySqlDataReader reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            //Check if answer is correct
                            wasAnswerCorrect = false;

                            //Check if question is correct out of any 4 options
                            if (answers[i] == reader["answerOption1"].ToString() && reader["isAnswerOption1Correct"].ToString() == "Correct")
                            {
                                wasAnswerCorrect = true;
                            }
                            else if (answers[i] == reader["answerOption2"].ToString() && reader["isAnswerOption2Correct"].ToString() == "Correct")
                            {
                                wasAnswerCorrect = true;
                            }
                            else if (answers[i] == reader["answerOption3"].ToString() && reader["isAnswerOption3Correct"].ToString() == "Correct")
                            {
                                wasAnswerCorrect = true;
                            }
                            else if (answers[i] == reader["answerOption4"].ToString() && reader["isAnswerOption4Correct"].ToString() == "Correct")
                            {
                                wasAnswerCorrect = true;
                            }

                            //If answer was correct add +1 to correctAnswers
                            if (wasAnswerCorrect == true)
                            {
                                correctAnswers += 1;
                            }

                            totalQuestions++;
                            i++;
                        }
                        reader.Close();

                        //Get course assign data
                        MySqlCommand getAssignDataCmd = new MySqlCommand("SELECT * FROM assignedCoursesTable WHERE assignedToID = @username AND courseID = @courseID", conn);
                        getAssignDataCmd.Parameters.Add("@username", MySqlDbType.VarChar).Value = username;
                        getAssignDataCmd.Parameters.Add("@courseID", MySqlDbType.VarChar).Value = courseID;
                        MySqlDataReader assignedCourseDateReader = getAssignDataCmd.ExecuteReader();
                        while (assignedCourseDateReader.Read())
                        {
                            assigedCourseDate = DateTime.Parse(assignedCourseDateReader["queryCreationDate"].ToString());
                            assignedBy        = assignedCourseDateReader["assignedByID"].ToString();
                        }

                        assignedCourseDateReader.Close();

                        //Submit score to DB
                        double score = (correctAnswers / totalQuestions) * 100;
                        totalScore = int.Parse(Math.Round(score).ToString());
                        MySqlCommand cmdInsertIntoDB = new MySqlCommand("INSERT INTO testScoringTable (courseName, assignedBy, dateAssigned, grade, assignedTo) VALUES (@courseName, @assignedBy, @dateAssigned, @grade, @assignedTo)", conn);
                        cmdInsertIntoDB.Parameters.Add("@courseName", MySqlDbType.VarChar).Value    = courseID;
                        cmdInsertIntoDB.Parameters.Add("@assignedBy", MySqlDbType.VarChar).Value    = assignedBy;
                        cmdInsertIntoDB.Parameters.Add("@dateAssigned", MySqlDbType.DateTime).Value = assigedCourseDate;
                        cmdInsertIntoDB.Parameters.Add("@grade", MySqlDbType.VarChar).Value         = totalScore;
                        cmdInsertIntoDB.Parameters.Add("@assignedTo", MySqlDbType.VarChar).Value    = username;
                        cmdInsertIntoDB.ExecuteNonQuery();

                        //Delete from assigned courses table
                        MySqlCommand deleteCommand = new MySqlCommand("DELETE FROM assignedCoursesTable WHERE assignedToID = @assignedToID AND courseID = @courseID", conn);
                        deleteCommand.Parameters.Add("@assignedToID", MySqlDbType.VarChar).Value = username;
                        deleteCommand.Parameters.Add("@courseID", MySqlDbType.VarChar).Value     = courseID;
                        deleteCommand.ExecuteNonQuery();

                        //Return true
                        return("true");
                    }
                    else
                    {
                        return("Not authorized to take course" + courseID);
                    }
                }
            }
            catch (Exception e)
            {
                EmailErrors emailerrors = new EmailErrors();
                emailerrors.autoEmailDeveloperAboutIssue("takeATestFunctions", "gradeTest", e.ToString());
                return("ERROR CATCH");
            }
        }