Search in sources :

Example 21 with Student

use of com.instructure.canvasapi2.models.Student in project instructure-android by instructure.

the class CourseTest method courseGrade_finalScoreMGP.

@Test
public void courseGrade_finalScoreMGP() {
    Course course = new Course();
    course.setHasGradingPeriods(true);
    double currentScore = 96.0;
    double finalScore = 47.0;
    Enrollment enrollment = new Enrollment();
    enrollment.setType("student");
    enrollment.setCurrentGradingPeriodId(27);
    enrollment.setMultipleGradingPeriodsEnabled(true);
    enrollment.setCurrentPeriodComputedFinalScore(finalScore);
    enrollment.setCurrentPeriodComputedCurrentScore(currentScore);
    ArrayList<Enrollment> enrollments = new ArrayList<>();
    enrollments.add(enrollment);
    course.setEnrollments(enrollments);
    assertTrue(course.getCourseGrade(false).getFinalScore() == finalScore);
}
Also used : ArrayList(java.util.ArrayList) Enrollment(com.instructure.canvasapi2.models.Enrollment) Course(com.instructure.canvasapi2.models.Course) Test(org.junit.Test)

Example 22 with Student

use of com.instructure.canvasapi2.models.Student in project tutorials by eugenp.

the class StudentController method update.

public Result update() {
    JsonNode json = request().body().asJson();
    if (json == null) {
        return badRequest(Util.createResponse("Expecting Json data", false));
    }
    Student student = StudentStore.getInstance().updateStudent(Json.fromJson(json, Student.class));
    if (student == null) {
        return notFound(Util.createResponse("Student not found", false));
    }
    JsonNode jsonObject = Json.toJson(student);
    return ok(Util.createResponse(jsonObject, true));
}
Also used : JsonNode(com.fasterxml.jackson.databind.JsonNode) Student(models.Student)

Example 23 with Student

use of com.instructure.canvasapi2.models.Student in project instructure-android by instructure.

the class QuizStartFragment method setupCallbacks.

private void setupCallbacks() {
    webViewClientCallback = new CanvasWebView.CanvasWebViewClientCallback() {

        @Override
        public void openMediaFromWebView(String mime, String url, String filename) {
            openMedia(mime, url, filename);
        }

        @Override
        public void onPageFinishedCallback(WebView webView, String url) {
        }

        @Override
        public void onPageStartedCallback(WebView webView, String url) {
        }

        @Override
        public boolean canRouteInternallyDelegate(String url) {
            return RouterUtils.canRouteInternally(null, url, ApiPrefs.getDomain(), false);
        }

        @Override
        public void routeInternallyCallback(String url) {
            RouterUtils.canRouteInternally(getActivity(), url, ApiPrefs.getDomain(), true);
        }
    };
    embeddedWebViewCallback = new CanvasWebView.CanvasEmbeddedWebViewCallback() {

        @Override
        public void launchInternalWebViewFragment(String url) {
            InternalWebviewFragment.Companion.loadInternalWebView(getActivity(), getNavigation(), InternalWebviewFragment.Companion.createBundle(course, url, false));
        }

        @Override
        public boolean shouldLaunchInternalWebViewFragment(String url) {
            return true;
        }
    };
    quizSubmissionTimeCanvasCallback = new StatusCallback<QuizSubmissionTime>() {

        @Override
        public void onResponse(@NonNull Response<QuizSubmissionTime> response, @NonNull LinkHeaders linkHeaders, @NonNull ApiType type) {
            if (type == ApiType.CACHE)
                return;
            QuizStartFragment.this.quizSubmissionTime = quizSubmissionTime;
            QuizManager.getQuizSubmissions(course, quiz.getId(), true, quizSubmissionResponseCanvasCallback);
        }
    };
    quizSubmissionResponseCanvasCallback = new StatusCallback<QuizSubmissionResponse>() {

        @Override
        public void onResponse(@NonNull Response<QuizSubmissionResponse> response, @NonNull LinkHeaders linkHeaders, @NonNull ApiType type) {
            if (type == ApiType.CACHE)
                return;
            final QuizSubmissionResponse quizSubmissionResponse = response.body();
            // since this is a student app, make sure they only have their own submissions (if they're siteadmin it'll be different)
            final ArrayList<QuizSubmission> submissions = new ArrayList<>();
            final User user = ApiPrefs.getUser();
            if (user != null) {
                for (QuizSubmission submission : quizSubmissionResponse.getQuizSubmissions()) {
                    if (submission.getUserId() == user.getId()) {
                        submissions.add(submission);
                    }
                }
            }
            quizSubmissionResponse.setQuizSubmissions(submissions);
            if (quizSubmissionResponse.getQuizSubmissions() == null || quizSubmissionResponse.getQuizSubmissions().size() == 0) {
                // No quiz submissions, let the user start the quiz.
                // They haven't turned it in yet, so don't show the turned-in view
                quizTurnedInContainer.setVisibility(View.GONE);
                shouldStartQuiz = true;
                next.setVisibility(View.VISIBLE);
                next.setEnabled(true);
            } else {
                // We should have at least 1 submission
                quizSubmission = quizSubmissionResponse.getQuizSubmissions().get(quizSubmissionResponse.getQuizSubmissions().size() - 1);
                next.setEnabled(true);
                final boolean hasUnlimitedAttempts = quiz.getAllowedAttempts() == -1;
                // Teacher can manually unlock a quiz for an individual student
                final boolean teacherUnlockedQuizAttempts = quizSubmission.isManuallyUnlocked();
                final boolean hasMoreAttemptsLeft = quizSubmission.getAttemptsLeft() > 0;
                final boolean canTakeQuizAgain = hasUnlimitedAttempts | teacherUnlockedQuizAttempts | hasMoreAttemptsLeft;
                if (quiz.getHideResults() == Quiz.HIDE_RESULTS_TYPE.ALWAYS && !canTakeQuizAgain) {
                    // Don't let the user see the questions if they've exceeded their attempts
                    next.setVisibility(View.GONE);
                } else if (quiz.getHideResults() == Quiz.HIDE_RESULTS_TYPE.AFTER_LAST_ATTEMPT && !canTakeQuizAgain) {
                    // They can only see the results after their last attempt, and that hasn't happened yet
                    next.setVisibility(View.GONE);
                }
                // -1 allowed attempts == unlimited
                if (quizSubmission.getFinishedAt() != null && !canTakeQuizAgain) {
                    // They've finished the quiz and they can't take it anymore; let them see results
                    next.setVisibility(View.VISIBLE);
                    next.setText(getString(R.string.viewQuestions));
                    shouldLetAnswer = false;
                } else {
                    // They are allowed to take the quiz...
                    next.setVisibility(View.VISIBLE);
                    if (quizSubmission.getFinishedAt() != null) {
                        shouldStartQuiz = true;
                        next.setText(getString(R.string.takeQuizAgain));
                    } else {
                        // Let the user resume their quiz
                        next.setText(getString(R.string.resumeQuiz));
                    }
                }
                if (quizSubmission.getFinishedAt() != null) {
                    quizTurnedIn.setText(getString(R.string.turnedIn));
                    quizTurnedInDetails.setText(DateHelper.getDateTimeString(getActivity(), quizSubmission.getFinishedAt()));
                    // The user has turned in the quiz, let them see the results
                    viewResults.setVisibility(View.VISIBLE);
                } else {
                    quizTurnedInContainer.setVisibility(View.GONE);
                }
                // Weird hack where if the time expires and the user hasn't submitted it doesn't let you start the quiz
                if (quizSubmission.getWorkflowState() == QuizSubmission.WORKFLOW_STATE.UNTAKEN && (quizSubmission.getEndAt() != null && (quizSubmissionTime != null && quizSubmissionTime.getTimeLeft() > 0))) {
                    next.setEnabled(false);
                    // submit the quiz for them
                    QuizManager.submitQuiz(course, quizSubmission, true, new StatusCallback<QuizSubmissionResponse>() {

                        @Override
                        public void onResponse(@NonNull Response<QuizSubmissionResponse> response, @NonNull LinkHeaders linkHeaders, @NonNull ApiType type) {
                            if (type == ApiType.CACHE)
                                return;
                            // the user has turned in the quiz, let them see the results
                            viewResults.setVisibility(View.VISIBLE);
                            next.setEnabled(true);
                            shouldStartQuiz = true;
                            next.setText(getString(R.string.takeQuizAgain));
                            QuizSubmissionResponse quizResponse = response.body();
                            // Since this is a student app, make sure they only have their own submissions (if they're siteadmin it'll be different)
                            final ArrayList<QuizSubmission> submissions = new ArrayList<>();
                            final User user = ApiPrefs.getUser();
                            if (user != null) {
                                for (QuizSubmission submission : quizResponse.getQuizSubmissions()) {
                                    if (submission.getUserId() == user.getId()) {
                                        submissions.add(submission);
                                    }
                                }
                            }
                            quizResponse.setQuizSubmissions(submissions);
                            if (quizResponse.getQuizSubmissions() != null && quizResponse.getQuizSubmissions().size() > 0) {
                                quizSubmission = quizResponse.getQuizSubmissions().get(quizResponse.getQuizSubmissions().size() - 1);
                            }
                        }
                    });
                }
                // If the user can only see results once and they have seen it, don't let them view the questions
                if (quiz.isOneTimeResults() && quizSubmission.hasSeenResults()) {
                    next.setVisibility(View.GONE);
                }
                if (quiz.isLockedForUser()) {
                    shouldStartQuiz = false;
                    next.setText(getString(R.string.assignmentLocked));
                }
            }
            populateQuizInfo();
            canvasLoading.setVisibility(View.GONE);
        }

        @Override
        public void onFail(@Nullable Call<QuizSubmissionResponse> call, @NonNull Throwable error, @Nullable Response response) {
            canvasLoading.setVisibility(View.GONE);
            // on quizzes.
            if (response != null && response.code() == 401) {
                populateQuizInfo();
                // there is a not authorized error, so don't let them start the quiz
                next.setVisibility(View.GONE);
            }
        }
    };
    quizStartResponseCallback = new StatusCallback<QuizSubmissionResponse>() {

        @Override
        public void onResponse(@NonNull Response<QuizSubmissionResponse> response, @NonNull LinkHeaders linkHeaders, @NonNull ApiType type) {
            if (response.code() == 200 && type == ApiType.API) {
                // We want to show the quiz here, but we need to get the quizSubmissionId first so our
                // api call for the QuizQuestionsFragment knows which questions to get
                StatusCallback<QuizSubmissionResponse> quizSubmissionResponseCallback = new StatusCallback<QuizSubmissionResponse>() {

                    @Override
                    public void onResponse(@NonNull Response<QuizSubmissionResponse> response, @NonNull LinkHeaders linkHeaders, @NonNull ApiType type) {
                        QuizSubmissionResponse quizSubmissionResponse = response.body();
                        if (quizSubmissionResponse != null && quizSubmissionResponse.getQuizSubmissions() != null && quizSubmissionResponse.getQuizSubmissions().size() > 0) {
                            quizSubmission = quizSubmissionResponse.getQuizSubmissions().get(quizSubmissionResponse.getQuizSubmissions().size() - 1);
                            if (quizSubmission != null) {
                                showQuiz();
                            } else {
                                getLockedMessage();
                            }
                        }
                    }
                };
                QuizManager.getFirstPageQuizSubmissions(course, quiz.getId(), false, quizSubmissionResponseCallback);
            }
        }

        @Override
        public void onFail(@Nullable Call<QuizSubmissionResponse> call, @NonNull Throwable error, @Nullable Response response) {
            if (response != null && response.code() == 403) {
                // Forbidden
                // Check to see if it's because of IP restriction or bad access code or either
                getLockedMessage();
            }
        }
    };
    quizStartSessionCallback = new StatusCallback<ResponseBody>() {
    };
}
Also used : User(com.instructure.canvasapi2.models.User) ArrayList(java.util.ArrayList) QuizSubmission(com.instructure.canvasapi2.models.QuizSubmission) ApiType(com.instructure.canvasapi2.utils.ApiType) NonNull(android.support.annotation.NonNull) CanvasWebView(com.instructure.pandautils.views.CanvasWebView) WebView(android.webkit.WebView) QuizSubmissionTime(com.instructure.canvasapi2.models.QuizSubmissionTime) LinkHeaders(com.instructure.canvasapi2.utils.LinkHeaders) StatusCallback(com.instructure.canvasapi2.StatusCallback) ResponseBody(okhttp3.ResponseBody) Response(retrofit2.Response) QuizSubmissionResponse(com.instructure.canvasapi2.models.QuizSubmissionResponse) CanvasWebView(com.instructure.pandautils.views.CanvasWebView) QuizSubmissionResponse(com.instructure.canvasapi2.models.QuizSubmissionResponse)

Example 24 with Student

use of com.instructure.canvasapi2.models.Student in project instructure-android by instructure.

the class AssignmentGroupListRecyclerAdapter method loadData.

@Override
public void loadData() {
    /*Logic regarding MGP is similar here as it is in both assignment recycler adapters,
            if changes are made here, check if they are needed in the other recycler adapters.*/
    Course course = (Course) mCanvasContext;
    // This check is for the "all grading periods" option
    if (mCurrentGradingPeriod != null && mCurrentGradingPeriod.getTitle() != null && mCurrentGradingPeriod.getTitle().equals(getContext().getString(R.string.allGradingPeriods))) {
        loadAssignment();
        return;
    }
    for (Enrollment enrollment : course.getEnrollments()) {
        // so we'll check the first student enrollment they have for the course
        if (enrollment.isStudent() && enrollment.isMultipleGradingPeriodsEnabled()) {
            if (mCurrentGradingPeriod == null || mCurrentGradingPeriod.getTitle() == null) {
                // we load current term by setting up the current GP
                mCurrentGradingPeriod = new GradingPeriod();
                mCurrentGradingPeriod.setId(enrollment.getCurrentGradingPeriodId());
                mCurrentGradingPeriod.setTitle(enrollment.getCurrentGradingPeriodTitle());
                // request the grading period objects and make the assignment calls
                // This callback is fulfilled in the grade list fragment.
                CourseManager.getGradingPeriodsForCourse(mGradingPeriodsCallback, course.getId(), true);
                // Then we go ahead and load up the assignments for the current period
                loadAssignmentsForGradingPeriod(mCurrentGradingPeriod.getId(), false);
                return;
            } else {
                // Otherwise we load the info from the currently selected grading period
                loadAssignmentsForGradingPeriod(mCurrentGradingPeriod.getId(), true);
                return;
            }
        }
    }
    // If we made it this far, MGP is disabled so we just go forward with the standard
    loadAssignment();
}
Also used : GradingPeriod(com.instructure.canvasapi2.models.GradingPeriod) Enrollment(com.instructure.canvasapi2.models.Enrollment) Course(com.instructure.canvasapi2.models.Course)

Example 25 with Student

use of com.instructure.canvasapi2.models.Student in project instructure-android by instructure.

the class SettingsActivity method removeStudent.

public void removeStudent(final Student student) {
    AnalyticUtils.trackButtonPressed(AnalyticUtils.REMOVE_STUDENT);
    setResult(RESULT_OK);
    final ProgressDialog dialog = ProgressDialog.show(SettingsActivity.this, getString(R.string.removingStudent), "", true, false);
    dialog.show();
    // this api call removes student data from the db (like alerts info).
    UserManager.removeStudentAirwolf(ApiPrefs.getAirwolfDomain(), student.getParentId(), student.getStudentId(), new StatusCallback<ResponseBody>() {

        @Override
        public void onResponse(@NonNull Response<ResponseBody> response, @NonNull LinkHeaders linkHeaders, @NonNull ApiType type) {
            dialog.dismiss();
            Toast.makeText(SettingsActivity.this, getString(R.string.studentRemoved), Toast.LENGTH_SHORT).show();
            int adapterSizeBeforeRemove = getAdapter().size();
            boolean removed = getAdapter().removeItem(student);
            if (removed && adapterSizeBeforeRemove == 1) {
                // Catches case for removing last student
                finish();
            }
        }
    });
}
Also used : LinkHeaders(com.instructure.canvasapi2.utils.LinkHeaders) ApiType(com.instructure.canvasapi2.utils.ApiType) ProgressDialog(android.app.ProgressDialog) ResponseBody(okhttp3.ResponseBody)

Aggregations

Enrollment (com.instructure.canvasapi2.models.Enrollment)24 Course (com.instructure.canvasapi2.models.Course)23 Test (org.junit.Test)22 ArrayList (java.util.ArrayList)21 Student (com.instructure.canvasapi2.models.Student)6 LinkHeaders (com.instructure.canvasapi2.utils.LinkHeaders)6 ApiPrefs (com.instructure.canvasapi2.utils.ApiPrefs)4 ApiType (com.instructure.canvasapi2.utils.ApiType)4 Prefs (com.instructure.pandautils.utils.Prefs)4 JsonNode (com.fasterxml.jackson.databind.JsonNode)3 RestBuilder (com.instructure.canvasapi2.builders.RestBuilder)3 Student (models.Student)3 Before (org.junit.Before)3 NonNull (android.support.annotation.NonNull)2 StatusCallback (com.instructure.canvasapi2.StatusCallback)2 BlockedStudentResponse (com.instructure.canvasapi2.models.BlockedStudentResponse)2 MismatchedRegionResponse (com.instructure.canvasapi2.models.MismatchedRegionResponse)2 ParentResponse (com.instructure.canvasapi2.models.ParentResponse)2 RevokedTokenResponse (com.instructure.canvasapi2.models.RevokedTokenResponse)2 Response (okhttp3.Response)2