'index.php', 'name' => get_lang('Administration')]; $form = new FormValidator('admin_questions', 'get'); $form->addHeader(get_lang('Questions')); $form->addText('id', get_lang('Id'), false); $form->addText('title', get_lang('Title'), false); $form->addText('description', get_lang('Description'), false); $form->addHidden('form_sent', 1); $form->addButtonSearch(get_lang('Search')); $questions = []; $pagination = ''; $formSent = isset($_REQUEST['form_sent']) ? (int) $_REQUEST['form_sent'] : 0; $length = 20; $questionCount = 0; if ($formSent) { $id = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : ''; $description = isset($_REQUEST['description']) ? $_REQUEST['description'] : ''; $title = isset($_REQUEST['title']) ? $_REQUEST['title'] : ''; $page = isset($_GET['page']) && !empty($_GET['page']) ? (int) $_GET['page'] : 1; $em = Database::getManager(); $repo = $em->getRepository('ChamiloCourseBundle:CQuizQuestion'); $criteria = new Criteria(); if (!empty($id)) { $criteria->where($criteria->expr()->eq('iid', $id)); } if (!empty($description)) { $criteria->orWhere($criteria->expr()->contains('description', $description."\r")); $criteria->orWhere($criteria->expr()->eq('description', $description)); $criteria->orWhere($criteria->expr()->eq('description', '

'.$description.'

')); } if (!empty($title)) { $criteria->orWhere($criteria->expr()->contains('question', "%$title%")); } $questions = $repo->matching($criteria); if (empty($id)) { $id = ''; } $params = [ 'id' => $id, 'title' => Security::remove_XSS($title), 'description' => Security::remove_XSS($description), 'form_sent' => 1, ]; $url = api_get_self().'?'.http_build_query($params); $form->setDefaults($params); $questionCount = count($questions); $paginator = new Paginator(); $pagination = $paginator->paginate($questions, $page, $length); $pagination->setItemNumberPerPage($length); $pagination->setCurrentPageNumber($page); $pagination->renderer = function ($data) use ($url) { $render = ''; return $render; }; if ($pagination) { $urlExercise = api_get_path(WEB_CODE_PATH).'exercise/admin.php?'; $exerciseUrl = api_get_path(WEB_CODE_PATH).'exercise/exercise.php?'; /** @var CQuizQuestion $question */ foreach ($pagination as $question) { $courseId = $question->getCId(); $courseInfo = api_get_course_info_by_id($courseId); $courseCode = $courseInfo['code']; $question->courseCode = $courseCode; // Creating empty exercise $exercise = new Exercise($courseId); $questionObject = Question::read($question->getId(), $courseInfo); ob_start(); ExerciseLib::showQuestion( $exercise, $question->getId(), false, null, null, false, true, false, true, true ); $question->questionData = ob_get_contents(); $exerciseData = ''; $exerciseId = 0; if (!empty($questionObject->exerciseList)) { // Question exists in a valid exercise $exerciseData .= get_lang('Tests').'
'; foreach ($questionObject->exerciseList as $exerciseId) { $exercise = new Exercise(); $exercise->course_id = $question->getCId(); $exercise->read($exerciseId); $exerciseData .= $exercise->title.' '; $exerciseData .= Display::url( Display::return_icon('edit.png', get_lang('Edit')), $urlExercise.http_build_query([ 'cidReq' => $courseCode, 'id_session' => $exercise->sessionId, 'exerciseId' => $exerciseId, 'type' => $question->getType(), 'editQuestion' => $question->getId(), ]) ); } $question->questionData .= '
'.$exerciseData; } else { // Question exists but it's orphan or it belongs to a deleted exercise $question->questionData .= Display::url( Display::return_icon('edit.png', get_lang('Edit')), $urlExercise.http_build_query([ 'cidReq' => $courseCode, 'id_session' => $exercise->sessionId, 'exerciseId' => $exerciseId, 'type' => $question->getType(), 'editQuestion' => $question->getId(), ]) ); $question->questionData .= Display::url( Display::return_icon('delete.png', get_lang('Delete')), $url.'&'.http_build_query([ 'courseId' => $question->getCId(), 'questionId' => $question->getId(), 'action' => 'delete', ]) ).'
'; // This means the question is added in a deleted exercise if ($questionObject->getCountExercise() > 0) { $exerciseList = $questionObject->getExerciseListWhereQuestionExists(); if (!empty($exerciseList)) { $question->questionData .= '
'.get_lang('Tests').'
'; /** @var CQuiz $exercise */ foreach ($exerciseList as $exercise) { $question->questionData .= $exercise->getTitle(); if ($exercise->getActive() == -1) { $question->questionData .= '- ('.get_lang('The test has been deleted').' #'.$exercise->getIid().') '; } $question->questionData .= '
'; } } } else { // This question is orphan :( $question->questionData .= ' '.get_lang('Orphan question'); } } ob_end_clean(); } } } $formContent = $form->returnForm(); $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : ''; switch ($action) { case 'delete': $questionId = isset($_REQUEST['questionId']) ? $_REQUEST['questionId'] : ''; $courseId = isset($_REQUEST['courseId']) ? $_REQUEST['courseId'] : ''; $courseInfo = api_get_course_info_by_id($courseId); $objQuestionTmp = Question::read($questionId, $courseInfo); if (!empty($objQuestionTmp)) { $result = $objQuestionTmp->delete(); if ($result) { Display::addFlash( Display::return_message( get_lang('Deleted').' #'.$questionId.' - "'.$objQuestionTmp->question.'"' ) ); } } header("Location: $url"); exit; break; } $tpl = new Template(get_lang('Questions')); $tpl->assign('form', $formContent); $tpl->assign('pagination', $pagination); $tpl->assign('pagination_length', $length); $tpl->assign('question_count', $questionCount); $layout = $tpl->get_template('admin/questions.tpl'); $tpl->display($layout);