Proyectos de Subversion Moodle

Rev

Rev 1 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 1 Rev 1441
Línea 139... Línea 139...
139
     */
139
     */
140
    public function setCategory($category) {
140
    public function setCategory($category) {
141
        if (count($this->questions)) {
141
        if (count($this->questions)) {
142
            debugging('You shouldn\'t call setCategory after setQuestions');
142
            debugging('You shouldn\'t call setCategory after setQuestions');
143
        }
143
        }
-
 
144
        $context = context::instance_by_id($category->contextid);
-
 
145
        if ($context->contextlevel !== CONTEXT_MODULE) {
-
 
146
            throw new \core\exception\moodle_exception('Invalid contextlevel for target category, must be CONTEXT_MODULE');
-
 
147
        }
144
        $this->category = $category;
148
        $this->category = $category;
145
        $this->importcontext = context::instance_by_id($this->category->contextid);
149
        $this->importcontext = $context;
146
    }
150
    }
Línea 147... Línea 151...
147
 
151
 
148
    /**
152
    /**
149
     * Set the specific questions to export. Should not include questions with
153
     * Set the specific questions to export. Should not include questions with
Línea 310... Línea 314...
310
 
314
 
311
        // loop through installed questiontypes checking for
315
        // loop through installed questiontypes checking for
312
        // function to handle this question
316
        // function to handle this question
313
        foreach (question_bank::get_all_qtypes() as $qtype) {
317
        foreach (question_bank::get_all_qtypes() as $qtype) {
314
            if (method_exists($qtype, $methodname)) {
318
            if (method_exists($qtype, $methodname)) {
315
                if ($question = $qtype->$methodname($data, $question, $this, $extra)) {
319
                if ($importedquestion = $qtype->$methodname($data, $question, $this, $extra)) {
316
                    return $question;
320
                    return $importedquestion;
317
                }
321
                }
318
            }
322
            }
319
        }
323
        }
320
        return false;
324
        return false;
Línea 479... Línea 483...
479
 
483
 
480
            if (isset($question->questiontextitemid)) {
484
            if (isset($question->questiontextitemid)) {
481
                $question->questiontext = file_save_draft_area_files($question->questiontextitemid,
485
                $question->questiontext = file_save_draft_area_files($question->questiontextitemid,
482
                        $this->importcontext->id, 'question', 'questiontext', $question->id,
486
                        $this->importcontext->id, 'question', 'questiontext', $question->id,
-
 
487
                        $fileoptions, $question->questiontext);
483
                        $fileoptions, $question->questiontext);
488
                file_clear_draft_area($question->questiontextitemid);
484
            } else if (isset($question->questiontextfiles)) {
489
            } else if (isset($question->questiontextfiles)) {
485
                foreach ($question->questiontextfiles as $file) {
490
                foreach ($question->questiontextfiles as $file) {
486
                    question_bank::get_qtype($question->qtype)->import_file(
491
                    question_bank::get_qtype($question->qtype)->import_file(
487
                            $this->importcontext, 'question', 'questiontext', $question->id, $file);
492
                            $this->importcontext, 'question', 'questiontext', $question->id, $file);
488
                }
493
                }
489
            }
494
            }
490
            if (isset($question->generalfeedbackitemid)) {
495
            if (isset($question->generalfeedbackitemid)) {
491
                $question->generalfeedback = file_save_draft_area_files($question->generalfeedbackitemid,
496
                $question->generalfeedback = file_save_draft_area_files($question->generalfeedbackitemid,
492
                        $this->importcontext->id, 'question', 'generalfeedback', $question->id,
497
                        $this->importcontext->id, 'question', 'generalfeedback', $question->id,
-
 
498
                        $fileoptions, $question->generalfeedback);
493
                        $fileoptions, $question->generalfeedback);
499
                file_clear_draft_area($question->generalfeedbackitemid);
494
            } else if (isset($question->generalfeedbackfiles)) {
500
            } else if (isset($question->generalfeedbackfiles)) {
495
                foreach ($question->generalfeedbackfiles as $file) {
501
                foreach ($question->generalfeedbackfiles as $file) {
496
                    question_bank::get_qtype($question->qtype)->import_file(
502
                    question_bank::get_qtype($question->qtype)->import_file(
497
                            $this->importcontext, 'question', 'generalfeedback', $question->id, $file);
503
                            $this->importcontext, 'question', 'generalfeedback', $question->id, $file);
Línea 506... Línea 512...
506
            $result = question_bank::get_qtype($question->qtype)->save_question_options($question);
512
            $result = question_bank::get_qtype($question->qtype)->save_question_options($question);
507
            $event = \core\event\question_created::create_from_question_instance($question, $this->importcontext);
513
            $event = \core\event\question_created::create_from_question_instance($question, $this->importcontext);
508
            $event->trigger();
514
            $event->trigger();
Línea 509... Línea 515...
509
 
515
 
510
            if (core_tag_tag::is_enabled('core_question', 'question')) {
516
            if (core_tag_tag::is_enabled('core_question', 'question')) {
511
                // Is the current context we're importing in a course context?
-
 
512
                $importingcontext = $this->importcontext;
-
 
513
                $importingcoursecontext = $importingcontext->get_course_context(false);
-
 
514
                $isimportingcontextcourseoractivity = !empty($importingcoursecontext);
-
 
515
 
-
 
516
                if (!empty($question->coursetags)) {
-
 
517
                    if ($isimportingcontextcourseoractivity) {
517
                // Course tags on question now deprecated so merge them into the question tags.
518
                        $mergedtags = array_merge($question->coursetags, $question->tags);
-
 
519
 
518
                $mergedtags = array_merge($question->coursetags ?? [], $question->tags ?? []);
520
                        core_tag_tag::set_item_tags('core_question', 'question', $question->id,
-
 
521
                            $question->context, $mergedtags);
519
                core_tag_tag::set_item_tags('core_question',
522
                    } else {
-
 
523
                        core_tag_tag::set_item_tags('core_question', 'question', $question->id,
-
 
524
                            context_course::instance($this->course->id), $question->coursetags);
-
 
525
 
520
                    'question',
526
                        if (!empty($question->tags)) {
-
 
527
                            core_tag_tag::set_item_tags('core_question', 'question', $question->id,
-
 
528
                                $importingcontext, $question->tags);
521
                    $question->id,
529
                        }
522
                    $question->context,
530
                    }
-
 
531
                } else if (!empty($question->tags)) {
-
 
532
                    core_tag_tag::set_item_tags('core_question', 'question', $question->id,
-
 
533
                        $question->context, $question->tags);
523
                    $mergedtags
534
                }
524
                );
Línea 535... Línea 525...
535
            }
525
            }
536
 
526
 
537
            if (!empty($result->error)) {
527
            if (!empty($result->error)) {
Línea 611... Línea 601...
611
            $context = context::instance_by_id($contextid);
601
            $context = context::instance_by_id($contextid);
612
            require_capability('moodle/question:add', $context);
602
            require_capability('moodle/question:add', $context);
613
        } else {
603
        } else {
614
            $context = context::instance_by_id($this->category->contextid);
604
            $context = context::instance_by_id($this->category->contextid);
615
        }
605
        }
-
 
606
 
-
 
607
        // If the file had categories in a deprecated context then the categories need to be applied to a default system type
-
 
608
        // mod_qbank instance on the course instead.
-
 
609
        if ($context->contextlevel !== CONTEXT_MODULE) {
-
 
610
            $qbank = \core_question\local\bank\question_bank_helper::get_default_open_instance_system_type($this->course, true);
-
 
611
            $context = context_module::instance($qbank->id);
-
 
612
        }
-
 
613
 
616
        $this->importcontext = $context;
614
        $this->importcontext = $context;
Línea 617... Línea 615...
617
 
615
 
618
        // Now create any categories that need to be created.
616
        // Now create any categories that need to be created.
619
        foreach ($catnames as $key => $catname) {
617
        foreach ($catnames as $key => $catname) {
Línea 958... Línea 956...
958
            $questionbankentry = question_bank::load_question($question->id);
956
            $questionbankentry = question_bank::load_question($question->id);
959
            $qcategory = $questionbankentry->category;
957
            $qcategory = $questionbankentry->category;
960
            $contextid = $DB->get_field('question_categories', 'contextid', ['id' => $qcategory]);
958
            $contextid = $DB->get_field('question_categories', 'contextid', ['id' => $qcategory]);
961
            $question->contextid = $contextid;
959
            $question->contextid = $contextid;
962
            $question->idnumber = $questionbankentry->idnumber;
960
            $question->idnumber = $questionbankentry->idnumber;
-
 
961
 
-
 
962
            // Do not export hidden questions.
-
 
963
            if ($question->status === \core_question\local\bank\question_version_status::QUESTION_STATUS_HIDDEN) {
-
 
964
                continue;
-
 
965
            }
-
 
966
 
963
            if ($question->status === \core_question\local\bank\question_version_status::QUESTION_STATUS_READY) {
967
            if ($question->status === \core_question\local\bank\question_version_status::QUESTION_STATUS_READY) {
964
                $question->status = 0;
968
                $question->status = 0;
965
            } else {
969
            } else {
966
                $question->status = 1;
970
                $question->status = 1;
967
            }
971
            }
Línea 968... Línea -...
968
 
-
 
969
            // do not export hidden questions
-
 
970
            if (!empty($question->hidden)) {
-
 
971
                continue;
-
 
972
            }
-
 
973
 
972
 
974
            // do not export random questions
973
            // do not export random questions
975
            if ($question->qtype == 'random') {
974
            if ($question->qtype == 'random') {
976
                continue;
975
                continue;
Línea 1023... Línea 1022...
1023
                    $count++;
1022
                    $count++;
1024
                }
1023
                }
1025
            }
1024
            }
1026
        }
1025
        }
Línea 1027... Línea 1026...
1027
 
1026
 
1028
        // continue path for following error checks
-
 
1029
        $course = $this->course;
-
 
1030
        $continuepath = "{$CFG->wwwroot}/question/bank/exportquestions/export.php?courseid={$course->id}";
-
 
1031
 
-
 
1032
        // did we actually process anything
1027
        // Did we actually process anything? Then continue path for following error checks.
-
 
1028
        if ($count==0) {
-
 
1029
            $contextid = $DB->get_field('question_categories', 'contextid', ['id' => $this->category->id]);
-
 
1030
            $context = context::instance_by_id($contextid);
1033
        if ($count==0) {
1031
            $continuepath = "{$CFG->wwwroot}/question/bank/exportquestions/export.php?cmid={$context->instanceid}";
1034
            throw new \moodle_exception('noquestions', 'question', $continuepath);
1032
            throw new \moodle_exception('noquestions', 'question', $continuepath);
Línea 1035... Línea 1033...
1035
        }
1033
        }
1036
 
1034