From caee2d88118506cd9281b3aa45b46825c6a38b4c Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Tue, 11 Dec 2018 16:18:53 -0500 Subject: [PATCH] WIP: LTI adding gradebook - refs BT#13469 #2741 --- main/gradebook/lib/fe/displaygradebook.php | 5 + src/LtiBundle/Controller/CourseController.php | 125 ++++++++++++++++++ 2 files changed, 130 insertions(+) diff --git a/main/gradebook/lib/fe/displaygradebook.php b/main/gradebook/lib/fe/displaygradebook.php index 58aefc1929..dbe8f31c43 100755 --- a/main/gradebook/lib/fe/displaygradebook.php +++ b/main/gradebook/lib/fe/displaygradebook.php @@ -417,6 +417,11 @@ class DisplayGradebook if ($show_add_link && !$message_resource) { $actionsLeft .= ''. Display::return_icon('new_evaluation.png', get_lang('NewEvaluation'), '', ICON_SIZE_MEDIUM).''; + $actionsLeft .= Display::url( + Display::return_icon('new_evaluation.png', get_lang('New evaluation for external tool'), [], ICON_SIZE_MEDIUM), + api_get_path(WEB_PUBLIC_PATH) + .'courses/'.$catobj->get_course_code().'/lti/grade/'.$catobj->get_id() + ); $cats = Category::load($selectcat); if ($cats[0]->get_course_code() != null && !$message_resource) { diff --git a/src/LtiBundle/Controller/CourseController.php b/src/LtiBundle/Controller/CourseController.php index c959007b63..606f1d00bc 100644 --- a/src/LtiBundle/Controller/CourseController.php +++ b/src/LtiBundle/Controller/CourseController.php @@ -415,6 +415,20 @@ class CourseController extends BaseController if (!$form->isSubmitted() || !$form->isValid()) { $this->setConfigureBreadcrumb($course); + $categories = \Category::load(null, null, $course->getCode()); + $actions = ''; + + if (!empty($categories)) { + $actions .= \Display::url( + \Display::return_icon('gradebook.png', get_lang('MakeQualifiable'), [], ICON_SIZE_MEDIUM), + $this->generateUrl( + 'chamilo_lti_grade', + ['catId' => $categories[0]->get_id(), 'code' => $course->getCode()] + ) + //'./gradebook/add_eval.php?selectcat='.$categories[0]->get_id().'&'.api_get_cidreq() + ); + } + return $this->render( '@ChamiloTheme/Lti/course_configure.twig', [ @@ -423,6 +437,7 @@ class CourseController extends BaseController 'global_tools' => $repo->findBy(['parent' => null, 'course' => null]), 'form' => $form->createView(), 'course' => $course, + 'actions' => $actions, ] ); } @@ -710,4 +725,114 @@ class CourseController extends BaseController return $newTool; } + + /** + * @Route("/grade/{catId}", name="chamilo_lti_grade", requirements={"catId"="\d+"}) + * + * @Security("has_role('ROLE_TEACHER')") + * + * @param string $catId + * + * @return void + * @throws \Exception + */ + public function gradeAction($catId) + { + $em = $this->getDoctrine()->getManager(); + $toolRepo = $em->getRepository('ChamiloLtiBundle:ExternalTool'); + $course = $this->getCourse(); + /** @var User $user */ + $user = $this->getUser(); + + $categories = \Category::load(null, null, $course->getCode()); + + if (empty($categories)) { + throw $this->createNotFoundException(); + } + + $evaladd = new \Evaluation(); + $evaladd->set_user_id($user->getId()); + + if (!empty($catId)) { + $evaladd->set_category_id($catId); + $cat = \Category::load($catId); + $evaladd->set_course_code($course->getCode()); + } else { + $evaladd->set_category_id(0); + } + + $form = new \EvalForm( + \EvalForm::TYPE_ADD, + $evaladd, + null, + 'add_eval_form', + null, + $this->generateUrl( + 'chamilo_lti_grade', + ['catId' => $catId, 'code' => $course->getCode()] + ).'?'.api_get_cidreq() + ); + $form->removeElement('name'); + $form->removeElement('addresult'); + /** @var \HTML_QuickForm_select $slcLtiTools */ + $slcLtiTools = $form->createElement('select', 'name', get_lang('Tool')); + $form->insertElementBefore($slcLtiTools, 'hid_category_id'); + $form->addRule('name', get_lang('ThisFieldIsRequired'), 'required'); + + $tools = $toolRepo->findBy(['course' => $course, 'gradebookEval' => null]); + + /** @var ExternalTool $tool */ + foreach ($tools as $tool) { + $slcLtiTools->addOption($tool->getName(), $tool->getId()); + } + + if (!$form->validate()) { + $this->setConfigureBreadcrumb($course); + + return $this->render( + '@ChamiloTheme/Lti/gradebook.html.twig', + [ + 'form' => $form->returnForm() + ] + ); + } + + $values = $form->exportValues(); + + $tool = $toolRepo->find($values['name']); + + if (empty($tool)) { + throw $this->createNotFoundException(); + } + + $eval = new \Evaluation(); + $eval->set_name($tool->getName()); + $eval->set_description($values['description']); + $eval->set_user_id($values['hid_user_id']); + + if (!empty($values['hid_course_code'])) { + $eval->set_course_code($values['hid_course_code']); + } + + $eval->set_course_code($course->getCode()); + $eval->set_category_id($values['hid_category_id']); + + $values['weight'] = $values['weight_mask']; + + $eval->set_weight($values['weight']); + $eval->set_max($values['max']); + $eval->set_visible(empty($values['visible']) ? 0 : 1); + $eval->add(); + + $gradebookEval = $em->find('ChamiloCoreBundle:GradebookEvaluation', $eval->get_id()); + + $tool->setGradebookEval($gradebookEval); + + $em->persist($tool); + $em->flush(); + + $this->addFlash('success', $this->trans('Evaluation for external tool added')); + + return $this->redirect(api_get_course_url()); + } }