123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- <?php
- /* For licensing terms, see /license.txt */
- use Chamilo\CourseBundle\Entity\CQuiz;
- use Chamilo\CourseBundle\Entity\CQuizQuestion;
- use ChamiloSession as Session;
- use Doctrine\Common\Collections\Criteria;
- use Knp\Component\Pager\Paginator;
- /**
- * @package chamilo.admin
- */
- $cidReset = true;
- require_once __DIR__.'/../inc/global.inc.php';
- $this_section = SECTION_PLATFORM_ADMIN;
- api_protect_admin_script();
- Session::erase('objExercise');
- Session::erase('objQuestion');
- Session::erase('objAnswer');
- $interbreadcrumb[] = ['url' => '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', '<p>'.$description.'</p>'));
- }
- 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 = '<ul class="pagination">';
- for ($i = 1; $i <= $data['pageCount']; $i++) {
- $page = (int) $i;
- $pageContent = '<li><a href="'.$url.'&page='.$page.'">'.$page.'</a></li>';
- if ($data['current'] == $page) {
- $pageContent = '<li class="active"><a href="#" >'.$page.'</a></li>';
- }
- $render .= $pageContent;
- }
- $render .= '</ul>';
- 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').'<br />';
- 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 .= '<br />'.$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',
- ])
- ).'<br />';
- // This means the question is added in a deleted exercise
- if ($questionObject->getCountExercise() > 0) {
- $exerciseList = $questionObject->getExerciseListWhereQuestionExists();
- if (!empty($exerciseList)) {
- $question->questionData .= '<br />'.get_lang('Tests').'<br />';
- /** @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 .= '<br />';
- }
- }
- } 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);
|