Example #1
0
        //Getting name from Profile
        public async Task <dynamic> GetProfile(string name)
        {
            //Make Call to get user name
            string accessToken = Properties.Settings.Default.CurrentAccessToken;
            //Get Profile
            string    endPoint  = Properties.Settings.Default.InstructureSite;
            Requester requester = new Requester();
            //Get Profile
            var json = await requester.MakeRequestAsync(endPoint + "/api/v1/users/self/profile?");

            //Deserialize json object onlif if data was returned
            if (json != "")
            {
                dynamic jsonObj = JsonConvert.DeserializeObject(json);
                //Parse json object
                dynamic jsonData = JObject.Parse(json);
                //Send back Name
                return(jsonData.name);
            }
            return("Not Logged In");
        }
        }//End Initialization

        private async void SimpleTextBox_Load(object sender, EventArgs e)
        {
            string accessToken = Properties.Settings.Default.CurrentAccessToken;
            var    token       = accessToken;
            //Get Profile
            string    endPoint  = Properties.Settings.Default.InstructureSite;
            Requester requester = new Requester();

            try
            {
                if (Properties.Settings.Default.CurrentAccessToken != "No Access Token" && Properties.Settings.Default.CurrentAccessToken != "")
                {
                    //Get Profile
                    var json = await requester.MakeRequestAsync(endPoint + "/api/v1/users/self/profile?");

                    //Dederialize json
                    dynamic jsonObj = JsonConvert.DeserializeObject(json);
                    //dispaly each json object
                    foreach (var obj in jsonObj)
                    {
                        rtbProfileOutput.AppendText(obj + "\n");
                    }
                    var    url  = jsonObj["avatar_url"];
                    string sUrl = url;
                    pictureBox1.Load(sUrl);
                }
                else
                {
                    MessageBox.Show("Not logged in", "Authentication error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }//endtry
            catch (Exception apiException)
            {
                MessageBox.Show("Token not authorized.  Input valid token.\n" + apiException.Message, "Authentication error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }//End Text box load
        //Load course and user
        private async void btnLoadCourse_Click(object sender, EventArgs e)
        {
            try
            {  //Ensure if there is active token
                if (Properties.Settings.Default.CurrentAccessToken != "No Access Token" && Properties.Settings.Default.CurrentAccessToken != "")
                {
                    if (nudCourseID.Value == 1)
                    {
                        MessageBox.Show("Please Enter a Course ID");
                    }
                    else
                    {
                        if (txbAssignName.TextLength > 0 & nudCourseID.Value > 1)
                        {
                            buttonSubmitAssign.Enabled = true;
                        }
                        else
                        {
                            buttonSubmitAssign.Enabled = false;
                        }
                        //allow user to input course name
                        txbBaseName.Enabled = true;

                        //Setting wait curser
                        Cursor.Current = Cursors.WaitCursor;

                        //Make Call to get user name
                        if (Properties.Settings.Default.CurrentAccessToken != "No Access Token" && Properties.Settings.Default.CurrentAccessToken != "")
                        {
                            string profileObject = "name";
                            string userName      = await getProfile.GetProfile(profileObject);

                            //Print message
                            labelLoggedIn.Text = "Logged in as " + userName;
                        }
                        else
                        {
                            labelLoggedIn.Text = "Not logged in";
                        }
                        //Get Assignment Groups and course name
                        try
                        {
                            string endPoint = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + Convert.ToString(nudCourseID.Value) + "/assignment_groups?";//Get base endpoint from setting

                            var json = await requester.MakeRequestAsync(endPoint);

                            dynamic jsonObj = JsonConvert.DeserializeObject(json);

                            foreach (var obj in jsonObj)
                            {
                                assignmentGroupvaluesAssign.Add(Convert.ToString(obj.id), Convert.ToString(obj.name));
                                cbxAssignmentGroup.Items.Add(Convert.ToString(obj.name));
                            }
                            //Get student Groups
                            endPoint = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + Convert.ToString(nudCourseID.Value) + "/group_categories?";

                            json = await requester.MakeRequestAsync(endPoint);

                            jsonObj = JsonConvert.DeserializeObject(json);

                            foreach (var obj in jsonObj)
                            {
                                assignmentStudentGroupvalues.Add(Convert.ToString(obj.id), Convert.ToString(obj.name));
                                cbxStudentAssignmentGroup.Items.Add(Convert.ToString(obj.name));
                            }
                            if (cbxStudentAssignmentGroup.Items.Count != 0)
                            {
                                groupBoxGroupAssign.Visible = true;
                            }
                            else
                            {
                                groupBoxGroupAssign.Visible = false;
                            }

                            //Get Course Name
                            endPoint = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + nudCourseID.Value + "?";

                            json = await requester.MakeRequestAsync(endPoint);

                            //deserialize the JSON object
                            jsonObj = JsonConvert.DeserializeObject(json);
                            //parse the JSON object
                            dynamic data = JObject.Parse(json);
                            //Printing out results
                            rtbResults.AppendText("Course " + Convert.ToString(data.name) + " has been selected!\n");
                        }
                        catch (Exception courseIDChangeException)
                        {
                            rtbResults.AppendText(courseIDChangeException.Message + "\n");
                        }

                        //End Wait Cursor
                        Cursor.Current = Cursors.Default;
                        //enable form selectors
                        cbxAssignmentGroup.Enabled        = true;
                        comboBoxGradeType.Enabled         = true;
                        comboBoxSubTypes.Enabled          = true;
                        cbxStudentAssignmentGroup.Enabled = true;
                    }
                }//end token check if
                else
                {
                    MessageBox.Show("Not logged in. Enter valid token", "Authentication error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }//end try
            catch (Exception apiException)
            {
                MessageBox.Show("Token not authorized.  Input valid token.\n" + apiException.Message, "Authentication error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }//End Load Course Click
Example #4
0
        //Load course and user
        private async void btnLoadCourse_Click(object sender, EventArgs e)
        {
            try
            { //Ensure active token
                if (Properties.Settings.Default.CurrentAccessToken != "No Access Token" && Properties.Settings.Default.CurrentAccessToken != "")
                {
                    if (nudCourseID.Value == 1)
                    {
                        MessageBox.Show("Please Enter a Course ID");
                    }
                    else
                    {
                        if (txbPageName.TextLength > 0 & nudCourseID.Value > 1)
                        {
                            buttonSubmitAssign.Enabled = true;
                        }
                        else
                        {
                            buttonSubmitAssign.Enabled = false;
                        }
                        //allow user to input course name
                        txbBaseName.Enabled = true;

                        //Setting wait curser
                        Cursor.Current = Cursors.WaitCursor;

                        //Make Call to get user name
                        if (Properties.Settings.Default.CurrentAccessToken != "No Access Token" && Properties.Settings.Default.CurrentAccessToken != "")
                        {
                            string profileObject = "name";
                            string userName      = await getProfile.GetProfile(profileObject);

                            //Print message
                            labelLoggedIn.Text = "Logged in as " + userName;
                        }
                        else
                        {
                            labelLoggedIn.Text = "Not logged in";
                        }
                        //Get course name
                        try
                        {
                            //Get Course Name
                            String    endPoint  = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + nudCourseID.Value + "?";
                            Requester requester = new Requester();
                            var       json      = await requester.MakeRequestAsync(endPoint, parameters.AccessToken());

                            //deserialize the JSON object
                            dynamic jsonObj = JsonConvert.DeserializeObject(json);
                            //parse the JSON object
                            dynamic data = JObject.Parse(json);
                            //Printing out results
                            rtbResults.AppendText("Course " + Convert.ToString(data.name) + " has been selected!\n");
                        }
                        catch (Exception courseIDChangeException)
                        {
                            rtbResults.AppendText(courseIDChangeException.Message + "\n");
                        }

                        //End Wait Cursor
                        Cursor.Current = Cursors.Default;
                    }
                }//end login if
                else
                {
                    MessageBox.Show("Not logged in. Enter valid token", "Authentication error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }//end try
            catch (Exception apiException)
            {
                MessageBox.Show("Token not authorized.  Input valid token.\n" + apiException.Message, "Authentication error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }// end load course
Example #5
0
        private async void buttonSubmitAssign_Click(object sender, EventArgs e)
        {
            string    restResult     = "No Call Made";                                                                                                     //this will be over written by results from web call
            var       tokenParameter = parameters.AccessToken();                                                                                           //Create
            string    endPoint       = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + Convert.ToString(nudCourseID.Value) + "/pages?"; //Get base endpoint from setting
            Requester requester      = new Requester();
            int       pageToMake     = Convert.ToInt32(nudNumberOfAssign.Value);
            int       pageNumber     = 0;

            //Setting parameters
            var editRoles     = parameters.EditRoles(radioButtonTeachers.Checked, radioButtonTeachandStu.Checked, radioButtonAnyone.Checked);
            var contentUpdate = parameters.ContentUpdate(checkBoxContentChange.Checked);
            var pagePublish   = parameters.PagePublish(checkBoxPagePublish.Checked);
            //combining all parameters
            var allParameters = editRoles + contentUpdate + pagePublish;

            //Make API Call
            try
            {
                //Validate fields

                //Write out submit header
                rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", "Page Name", "Status"));
                //Write Repeating submit
                if (xbxUseBase.Checked == true)
                {
                    try
                    {
                        //Validate Number in text
                        var pattern     = @"\[([^\]]*)\]";
                        var inputNumber = Regex.Match(txbBaseName.Text, pattern).Value.Replace("[", "").Replace("]", "");
                        pageNumber = Convert.ToInt32(inputNumber);
                        //While loop to run until Quizes to make is zero

                        try
                        {
                            while (pageToMake > 0)
                            {
                                //Incrementing page number
                                var incrementedAssignName         = Regex.Replace(txbBaseName.Text, @"\[([^\]]*)\]", Convert.ToString(pageNumber));
                                var htmlSafeIncrementedAssignName = Uri.EscapeDataString(incrementedAssignName);
                                var assignTitleParameter          = "&wiki_page[title]=" + htmlSafeIncrementedAssignName;
                                //Formating Quiz Description for HTML
                                var incrementedAssignInstruction         = Regex.Replace(rtbAssignInstructions.Text, @"\[([^\]]*)\]", incrementedAssignName);
                                var htmlSafeIncrementedAssignInstruction = Uri.EscapeDataString(incrementedAssignInstruction);
                                var pageDescriptionParameter             = parameters.PageDescription(htmlSafeIncrementedAssignInstruction);

                                //REST Call

                                restResult = await requester.MakeRequestAsync(endPoint, Properties.Settings.Default.CurrentAccessToken, assignTitleParameter + allParameters + pageDescriptionParameter);

                                //Write Results to Text box
                                rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", incrementedAssignName, "Created"));
                                pageNumber++;
                                pageToMake--;
                            }//End Repeating submit while statement

                            //Clear Page names
                            txbBaseName.Text = "";
                            txbPageName.Text = "";
                        }//End try
                        catch (Exception apiException)
                        {
                            MessageBox.Show(apiException.Message);
                        }
                    }//End try On validating text in bracket
                    catch (FormatException bracketNumberException)
                    {
                        MessageBox.Show("Please enter a number in brackets or uncheck \"Use base Name and Increment\"\n\n" + bracketNumberException.Message);
                    }//End Catch on validating text in bracket
                }
                //Write single submit
                else
                {
                    //Creating Assign Title and making it HTML safe
                    var pageTitleParameter = "&wiki_page[title]=" + Uri.EscapeDataString(txbPageName.Text);
                    //Formating Assignment Description for HTML
                    var incrementedPageInstruction = Regex.Replace(rtbAssignInstructions.Text, @"\[([^\]]*)\]", txbPageName.Text);
                    //Makeing Assignment instruction HTML Safe
                    var htmlSafeIncrementedAssignInstruction = Uri.EscapeDataString(incrementedPageInstruction);
                    //Setting Assignment description parameter
                    var pageDescriptionParameter = parameters.PageDescription(htmlSafeIncrementedAssignInstruction);
                    restResult = await requester.MakeRequestAsync(endPoint, Properties.Settings.Default.CurrentAccessToken, pageTitleParameter + allParameters + pageDescriptionParameter);

                    //Reset form for next submit
                    nudCourseID.TabStop = false;
                    txbBaseName.TabStop = false;
                    //Write Results to Text box
                    rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", txbPageName.Text, "Created"));
                } // end else
            }     //End Single Submit

            catch (Exception apiException)
            {
                rtbResults.AppendText("Submit Failed: " + apiException.Message + "\n");
            }
        }//End Submit
Example #6
0
        private async Task <List <Assignment> > populateGradingEventHistory(List <Course> courseList, List <ReservedAssignment> gradingReservedList)
        {
            Requester requester = new Requester();


            List <Assignment> ungradedAssignmentList = new List <Assignment>();
            string            urlParameters;

            urlParameters  = "student_ids[]=all";
            urlParameters += "&include[]=assignment";
            urlParameters += "&workflow_state[]=submitted";
            urlParameters += "&workflow_state[]=pending_review";
            urlParameters += "&enrollment_state=active";

            //async webcalls vars
            List <Task> tasks = new List <Task>();

            // gets grading event history
            // adds each call to task
            foreach (Course course in courseList)
            {
                tasks.Add(Task.Run(async() =>
                {
                    string endPoint = Properties.Settings.Default.InstructureSite + $"/api/v1/courses/{course.CourseID}/students/submissions?{urlParameters}&";

                    string json = await requester.MakeRequestAsync(endPoint, Properties.Settings.Default.CurrentAccessToken);
                    if (json != "")
                    {
                        dynamic jsonObj = JsonConvert.DeserializeObject(json);
                        if (jsonObj.Count > 0)
                        {
                            foreach (var submission in jsonObj)
                            {
                                var temp_submitted_at = Convert.ToString(submission.submitted_at);

                                var assignment = submission.assignment;
                                //There is data that came back without a submission date and crashed the program.
                                if (DateTime.TryParse(temp_submitted_at, out DateTime submitted_at))
                                {
                                    submitted_at = submitted_at.ToLocalTime();

                                    //var url = Convert.ToString(submission.url);
                                    //var submitted_at = Convert.ToDateTime(submission.submitted_at).ToLocalTime();
                                    //var submitted_at = Convert.ToString(submission.submitted_at);
                                    var workflow_state    = Convert.ToString(submission.workflow_state);
                                    var assignment_id     = Convert.ToString(submission.assignment_id);
                                    var user_id           = Convert.ToString(submission.user_id);
                                    var priority          = -1;
                                    var graded_at         = Convert.ToString(submission.graded_at);
                                    var posted_at         = Convert.ToString(submission.posted_at);
                                    var preview_url       = Convert.ToString(submission.preview_url);
                                    var grader            = Convert.ToString(submission.grader);
                                    var assignment_name   = Convert.ToString(assignment.name);
                                    var current_graded_at = Convert.ToString(submission.current_graded_at);
                                    var current_grader    = Convert.ToString(submission.current_grader);
                                    var speed_grader_url  = $"{Properties.Settings.Default.InstructureSite}/courses/{course.CourseID}/gradebook/speed_grader?assignment_id={assignment_id}&student_id={user_id}";
                                    var grades_url        = $"{Properties.Settings.Default.InstructureSite}/courses/{course.CourseID}/grades/{user_id}";
                                    var reserved          = false;
                                    //assigning priority for sorting
                                    priority = assignPriority($"{assignment_name} {course.CourseName}");
                                    //see if assignment is reserved
                                    var results = gradingReservedList.Where(reservedAssignment => reservedAssignment._id == speed_grader_url);
                                    if (results.Count() > 0)
                                    {
                                        var theReservation = results.ElementAt(0);
                                        reserved           = true;
                                        workflow_state     = $"Reserved by {theReservation.grader} at {theReservation.reserved_at}";
                                        //remove the item from the grading reserve list, the list will be used to trim up the grading database
                                        gradingReservedList.Remove(theReservation);
                                    }

                                    ungradedAssignmentList.Add(new Assignment(reserved, priority, course.CourseName, assignment_name, submitted_at, workflow_state, speed_grader_url, grades_url));
                                }
                            }
                        }
                    }
                }));//end task
            }//end foreach

            //waits for all tasks
            await Task.WhenAll(tasks.ToArray());

            return(ungradedAssignmentList);
        }
        //Load course and user
        private async void btnLoadCourse_Click(object sender, EventArgs e)
        {
            try
            {  //Ensure if there is active token
                if (Properties.Settings.Default.CurrentAccessToken != "No Access Token" && Properties.Settings.Default.CurrentAccessToken != "")
                {
                    if (nudCourseID.Value == 1)
                    {
                        MessageBox.Show("Please Enter a Course ID");
                    }
                    else
                    {
                        //allow user to input course name
                        txbBaseName.Enabled = true;

                        //Setting wait curser
                        Cursor.Current = Cursors.WaitCursor;

                        //Make Call to get user name
                        if (Properties.Settings.Default.CurrentAccessToken != "No Access Token" && Properties.Settings.Default.CurrentAccessToken != "")
                        {
                            string profileObject = "name";
                            string userName      = await getProfile.GetProfile(profileObject);

                            //Print message
                            labelLoggedIn.Text = "Logged in as " + userName;
                        }
                        else
                        {
                            labelLoggedIn.Text = "Not logged in";
                        }
                        //Get course name
                        try
                        {
                            //Get Course Name
                            string    endPoint  = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + nudCourseID.Value + "?";
                            Requester requester = new Requester();
                            var       json      = await requester.MakeRequestAsync(endPoint);

                            //deserialize the JSON object
                            dynamic jsonObj = JsonConvert.DeserializeObject(json);
                            //parse the JSON object
                            dynamic data = JObject.Parse(json);
                            //Printing out results
                            rtbResults.AppendText("Course " + Convert.ToString(data.name) + " has been selected!\n");
                        }
                        catch (Exception courseIDChangeException)
                        {
                            rtbResults.AppendText(courseIDChangeException.Message + "\n");
                        }

                        //Get list of modules for module position grid
                        try
                        {
                            //reset modules listed
                            courseModulesGrid.Columns.Clear();
                            courseModulesGrid.Refresh();
                            string    endPoint  = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + nudCourseID.Value + "/modules?";//Get endpoint
                            Requester requester = new Requester();
                            var       json      = await requester.MakeRequestAsync(endPoint);

                            dynamic jsonObj = JsonConvert.DeserializeObject(json);
                            courseModulesGrid.Columns.Add("moduleName", "Module Name");
                            courseModulesGrid.Columns.Add("modulePos", "Position");
                            courseModulesGrid.Columns[0].Width = 50;
                            courseModulesGrid.Columns[1].Width = 50;

                            foreach (var obj in jsonObj)
                            {
                                courseModulesGrid.Rows.Add(String.Format(Convert.ToString(obj.name)), (Convert.ToString(obj.position)));
                            }
                            courseModulesGrid.ClearSelection();
                        } //end try
                        catch (Exception populateModulesGridException)
                        {
                            MessageBox.Show(populateModulesGridException.Message + "\n");
                        }
                        //End Wait Cursor
                        Cursor.Current = Cursors.Default;
                    }
                }//end token check if
                else
                {
                    MessageBox.Show("Not logged in. Enter valid token", "Authentication error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }//end try
            catch (Exception apiException)
            {
                MessageBox.Show("Token not authorized.  Input valid token.\n" + apiException.Message, "Authentication error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }//End Load Course Click
        private async void btnSubmitModule_Click(object sender, EventArgs e)
        {
            try
            {
                string    restResult     = "No Call Made";                                                                                     //this will be over written by results from web call
                var       tokenParameter = parameters.AccessToken();                                                                           //Create
                string    endPoint       = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + nudCourseID.Value + "/modules?"; //Get endpoint
                Requester requester      = new Requester();
                int       moduleToMake   = Convert.ToInt32(nudNumberOfModule.Value);
                int       moduleNumber   = 0;

                var requireSequentialProgress = parameters.SequentialProgress(seqProgress.Checked);
                var dateToUnlock  = parameters.UnlockDate(unlockOnDate.Checked, datePicker.Value);
                var modulePostion = parameters.ModulePosition(setModulePos.Checked, nudModulePos.Value);



                //combining all parameters
                var allParameters = requireSequentialProgress + dateToUnlock + modulePostion;

                //Make API Call
                try
                {
                    //Validate fields

                    //Write out submit header
                    rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", "Module Name", "Status"));
                    //Write Repeating submit
                    if (xbxUseBase.Checked == true)
                    {
                        try
                        {
                            //Validate Number in text
                            var pattern     = @"\[([^\]]*)\]";
                            var inputNumber = Regex.Match(txbBaseName.Text, pattern).Value.Replace("[", "").Replace("]", "");
                            moduleNumber = Convert.ToInt32(inputNumber);

                            //While loop to run until modules to make is zero
                            try
                            {
                                while (moduleToMake > 0)
                                {
                                    //Incrementing assignment number
                                    var incrementedModuleName         = Regex.Replace(txbBaseName.Text, @"\[([^\]]*)\]", Convert.ToString(moduleNumber));
                                    var htmlSafeIncrementedModuleName = Uri.EscapeDataString(incrementedModuleName);
                                    var moduleTitleParameter          = "&module[name]=" + htmlSafeIncrementedModuleName;

                                    restResult = await requester.MakeRequestAsync(endPoint, moduleTitleParameter + allParameters);

                                    //Write Results to Text box
                                    rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", incrementedModuleName, "Created"));
                                    moduleNumber++;
                                    moduleToMake--;
                                }//End Repeating submit while statement

                                //Clear Module Names
                                txbBaseName.Text   = "";
                                txbModuleName.Text = "";
                            }//End try
                            catch (Exception apiException)
                            {
                                MessageBox.Show(apiException.Message);
                            }
                        }//End try On validating text in bracket
                        catch (FormatException bracketNumberException)
                        {
                            MessageBox.Show("Please enter a number in brackets or uncheck \"Use base Name and Increment\"\n\n" + bracketNumberException.Message);
                        }//End Catch on validating text in bracket
                    }
                    //Write single submit
                    else
                    {
                        //Creating Module Name and making it HTML safe
                        var moduleNameParameter = "&module[name]=" + Uri.EscapeDataString(txbModuleName.Text);
                        MessageBox.Show(tokenParameter + moduleNameParameter + allParameters);
                        restResult = await requester.MakeRequestAsync(endPoint, moduleNameParameter + allParameters);

                        //Reset form for next submit
                        nudCourseID.TabStop = false;
                        txbBaseName.TabStop = false;
                        //Write Results to Text box
                        rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", txbModuleName.Text, "Created"));
                    } // end else
                }     //End Single Submit

                catch (Exception apiException)
                {
                    rtbResults.AppendText("Submit Failed: " + apiException.Message + "\n");
                }
            } //end try
            catch (Exception apiException)
            {
                MessageBox.Show("Token not authorized.  Input valid token.\n" + apiException.Message, "Authentication error",
                                MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
Example #9
0
        public async void loadCourseLists()
        {
            addToCourse.Enabled = false;
            coursesAccessToken  = Properties.Settings.Default.CurrentAccessToken;
            CanvasAPIMainForm.GlobalCourseID = 1;

            //async webcalls vars
            List <Tuple <string, string> > studentList = new List <Tuple <string, string> >();
            List <Task> tasks = new List <Task>();

            //Setting wait cursor
            Cursor.Current = Cursors.WaitCursor;

            //Make Call to get user name
            if (Properties.Settings.Default.CurrentAccessToken != "No Access Token" && Properties.Settings.Default.CurrentAccessToken != "")
            {
                string profileObject = "name";
                string userName      = await getProfile.GetProfile(profileObject);

                //Print message
                labelLoggedIn.Text = "Showing courses for " + userName;
            }
            else
            {
                labelLoggedIn.Text = "Not logged in";
            }

            //clear all datagridviews
            courseStudentsGrid.Columns.Clear();
            allStudentsGrid.Columns.Clear();
            courseDataGridView.Columns.Clear();

            // get jsonObj file
            string endPoint = Properties.Settings.Default.InstructureSite + "/api/v1/courses?per_page=1000&include[]=total_students&";//Get endpoint

            var json = await requester.MakeRequestAsync(endPoint, coursesAccessToken);

            dynamic jsonObj = JsonConvert.DeserializeObject(json);

            //create columns and set width
            courseDataGridView.Columns.Add("courseName", "Course Name");
            courseDataGridView.Columns.Add("courseID", "Course ID");
            courseDataGridView.Columns.Add("courseState", "Workflow State");
            courseDataGridView.Columns.Add("courseStudents", "Student Count");
            courseDataGridView.Columns.Add("courseRoles", "Roles");
            courseDataGridView.Columns[0].Width = 290;
            courseDataGridView.Columns[2].Width = 90;
            courseDataGridView.Columns[3].Width = 50;

            //create student grid columns
            allStudentsGrid.Columns.Add("studentName", "Name");
            allStudentsGrid.Columns.Add("studentID", "ID");

            string studentsAdded = "";

            //async gets students in each course
            foreach (var course in jsonObj)
            {
                //get and format course roles
                string rolesString = "";
                foreach (dynamic v in course.enrollments)
                {
                    rolesString += v.type + ", ";
                }
                rolesString = rolesString.Trim().Trim(',');

                //populate course list
                courseDataGridView.Rows.Add(String.Format(Convert.ToString(course.name)), (Convert.ToString(course.id)), (Convert.ToString(course.workflow_state)), (Convert.ToString(course.total_students)), Convert.ToString(rolesString));

                //set up each call in a task list
                tasks.Add(Task.Run(async() =>
                {
                    endPoint = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + course.id + "/users?per_page=1000&"; //Get endpoint

                    json    = await requester.MakeRequestAsync(endPoint, coursesAccessToken);
                    jsonObj = JsonConvert.DeserializeObject(json);

                    //list to add student id's to after they have been added to the all students list
                    string currentCourseID = Convert.ToString(course.id);

                    foreach (var student in jsonObj)
                    {
                        if (student.sis_user_id != null && student.name != null)
                        {
                            //add student if the id is not found in students added
                            if (!studentsAdded.Contains(Convert.ToString(student.sis_user_id)))
                            {
                                studentList.Add(new Tuple <string, string>(Convert.ToString(student.name), Convert.ToString(student.sis_user_id)));

                                //allStudentsGrid.Rows.Add(String.Format(Convert.ToString(student.name)), (Convert.ToString(student.sis_user_id)));

                                //add to list
                                studentsAdded += Convert.ToString(student.sis_user_id);
                            }
                        }
                    }//end for
                }));//end task
            }

            //lets tasks complete
            await Task.WhenAll(tasks.ToArray());

            //when tasks are complete, fill out UI
            for (int i = 0; i < studentList.Count; i++)
            {
                allStudentsGrid.Rows.Add(studentList[i].Item1, studentList[i].Item2);
            }

            //clear selections and sort columns
            allStudentsGrid.Sort(allStudentsGrid.Columns[0], System.ComponentModel.ListSortDirection.Ascending);
            allStudentsGrid.ClearSelection();
            courseStudentsGrid.ClearSelection();
            removeFromCourse.Enabled = false;
            courseDataGridView.Sort(courseDataGridView.Columns[0], System.ComponentModel.ListSortDirection.Ascending);
            courseDataGridView.ClearSelection();
        }
Example #10
0
        }//End Control items in response combo box

        //submit Button
        private async void btnSubmitQuiz_Click(object sender, EventArgs e)
        {
            //create variables

            string    restResult     = "No Call Made";                                                                                                       //this will be over written by results from web call
            var       tokenParameter = methods.AccessToken();                                                                                                //Create
            string    endPoint       = Properties.Settings.Default.InstructureSite + "/api/v1/courses/" + Convert.ToString(nudCourseID.Value) + "/quizzes?"; //Get base endpoint from setting
            Requester requester      = new Requester();
            int       quizesToMake   = Convert.ToInt32(nudNumberOfQuiz.Value);
            int       quizNumber     = 0;
            //Setting methods

            var quizTypeParameter = methods.QuizType(Convert.ToString(cbxQuizType.SelectedItem));
            //Getting key back
            var assignmentGroupKey           = (from kvp in assignmentGroupvalues where kvp.Value == Convert.ToString(cbxAssignmentGroup.SelectedItem) select kvp.Key).FirstOrDefault();
            var assignmentTypeParameter      = methods.AssignmentGroup(assignmentGroupKey);
            var quizTimeLimitParameter       = methods.QuizTimeLimit(xbxTimeLimit.Checked, Convert.ToInt32(nudMinutes.Value));
            var shuffleAnswersParameter      = methods.ShuffleAnswers(xbxShuffle.Checked);
            var hideResultsParameter         = methods.HideResults(xbxQuizResponses.Checked, xbxOnlyAfterLastAttempt.Checked);
            var showCorrectAnswer            = methods.ShowCorrectAnswer(xbxSeeCorrectAnswers.Checked);
            var showCorrectAnswerLastAttempt = methods.ShowCorrectAnswerLastAttempt(xbxCorrectAnswersAfterLastAttempt.Checked);
            var showCorrectAnswersAt         = methods.ShowCorrectAnswerAt(xbxSeeCorrectAnswers.Checked, dtpShow.Checked, dtpShow.Value, dtpShowTime.Value);
            var hideCorrectAnswersAt         = methods.HideCorrectAnswerAt(xbxSeeCorrectAnswers.Checked, dtpHide.Checked, dtpHide.Value, dtpHideTime.Value);
            var allowedAttempts              = methods.AllowedAttempts(xbxAttempts.Checked, xbxLimitAttempts.Checked, Convert.ToInt32(nudAttempts.Value));
            var scoringPolicy                = methods.ScoringPolicy(Convert.ToString(cbxScoreToKeep.SelectedItem));
            var oneQuestionAtATime           = methods.OneQuestionAtATime(xbxOneQuestionTime.Checked);
            var cantGoBack                   = methods.CantGoBack(xbxOneQuestionTime.Checked, xbxLockQuestion.Checked);
            var accessCode                   = methods.AccessCode(xbxAccessCode.Checked, txbAccessCode.Text);
            var ipAddressFilter              = methods.IpAddressFiltering(xbxIPAddresses.Checked, txbIPAddresses.Text);
            var oneTimeResults               = methods.OneTimeResults(xbxQuizResponses.Checked, xbxOnlyOnce.Checked);
            var requireLockdownBrowser       = methods.RequireLockdownBrowser(xbxRequireLockDownBowser.Checked);
            var requireLockdownBrowsertoView = methods.RequireLockdownBrowsertoVeiwResults(xbxRequireLockDownBowser.Checked, xbxRequireLockDownBrowsertoViewResuts.Checked);
            var dueDate     = methods.DueDate(dtpDueDate.Checked, dtpDueDate.Value, dtpDueDateTime.Value);
            var unlockDate  = methods.UnlockDate(dtpUnlockDate.Checked, dtpUnlockDate.Value, dtpUnlockDateTime.Value);
            var lockDate    = methods.LockDate(dtpLockDate.Checked, dtpLockDate.Value, dtpLockDateTime.Value);
            var publishQuiz = methods.PublishQuiz(xbxPublish.Checked);
            //combining all parameters
            var allParameters = quizTypeParameter + assignmentTypeParameter
                                + shuffleAnswersParameter + quizTimeLimitParameter + hideResultsParameter + showCorrectAnswer + showCorrectAnswerLastAttempt
                                + showCorrectAnswersAt + hideCorrectAnswersAt + dueDate + unlockDate + lockDate + allowedAttempts + scoringPolicy + oneQuestionAtATime
                                + cantGoBack + accessCode + ipAddressFilter + oneTimeResults + requireLockdownBrowser + publishQuiz + requireLockdownBrowsertoView;

            //rtbResults.AppendText(allParameters);

            //Make API Call

            try
            {
                //Validate fields

                //Write out submit header
                rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", "Quiz Name", "Status"));
                //Write Repeating submit
                if (xbxUseBase.Checked == true)
                {
                    try
                    {
                        //Validate Number in text
                        var pattern     = @"\[([^\]]*)\]";
                        var inputNumber = Regex.Match(txbBaseName.Text, pattern).Value.Replace("[", "").Replace("]", "");
                        quizNumber = Convert.ToInt32(inputNumber);
                        //While loop to run until Quizes to make is zero

                        try
                        {
                            while (quizesToMake > 0)
                            {
                                //Incrementing quiz number
                                var incrementedQuizName         = Regex.Replace(txbBaseName.Text, @"\[([^\]]*)\]", Convert.ToString(quizNumber));
                                var htmlSafeIncrementedQuizName = Uri.EscapeDataString(incrementedQuizName);
                                var quizTitleParameter          = "&quiz[title]=" + htmlSafeIncrementedQuizName;
                                //Formating Quiz Description for HTML
                                var incrementedQuizInstruction         = Regex.Replace(rtbQuizInstructions.Text, @"\[([^\]]*)\]", incrementedQuizName);
                                var htmlSafeIncrementedQuizInstruction = Uri.EscapeDataString(incrementedQuizInstruction);
                                var quizDescriptionParameter           = methods.QuizDescription(htmlSafeIncrementedQuizInstruction);
                                //REST Call
                                restResult = await requester.MakeRequestAsync(endPoint, Properties.Settings.Default.CurrentAccessToken, quizTitleParameter + allParameters + quizDescriptionParameter);

                                //Write Results to Text box
                                rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", incrementedQuizName, "Created"));
                                quizNumber++;
                                quizesToMake--;
                            }//End Repeating submit while statement

                            //Clear QuizNames
                            txbBaseName.Text = "";
                            txbQuizName.Text = "";
                        }//End try
                        catch (Exception apiException)
                        {
                            MessageBox.Show(apiException.Message);
                        }
                    }//End try On validating text in bracket
                    catch (FormatException bracketNumberException)
                    {
                        MessageBox.Show("Please enter a number in brackets or uncheck \"Use base Name and Increment\"\n\n" + bracketNumberException.Message);
                    }//End Catch on validating text in bracket
                }
                //Write single submit
                else
                {
                    //Creating Quiz Title and making it HTML safe
                    var quizTitleParameter = "&quiz[title]=" + Uri.EscapeDataString(txbQuizName.Text);
                    //Formating Quiz Description for HTML
                    var incrementedQuizInstruction = Regex.Replace(rtbQuizInstructions.Text, @"\[([^\]]*)\]", txbQuizName.Text);
                    //Makeing Quiz instruction HTML Safe
                    var htmlSafeIncrementedQuizInstruction = Uri.EscapeDataString(incrementedQuizInstruction);
                    //Setting quiz description parameter
                    var quizDescriptionParameter = methods.QuizDescription(htmlSafeIncrementedQuizInstruction);
                    restResult = await requester.MakeRequestAsync(endPoint, Properties.Settings.Default.CurrentAccessToken, quizTitleParameter + allParameters + quizDescriptionParameter);

                    //Reset form for next submit
                    nudCourseID.TabStop = false;
                    txbBaseName.TabStop = false;
                    //Write Results to Text box
                    rtbResults.AppendText(String.Format("{0,-50} {1,-10}\n", txbQuizName.Text, "Created"));
                }//End Single Submit
            }
            catch (Exception apiException)
            {
                rtbResults.AppendText("Submit Failed: " + apiException.Message + "\n");
            }
        }//End Submit