//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
//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
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
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); } }
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(); }
}//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