From 10daf4b23c337ee4eea2ca42d1056d536eadfc28 Mon Sep 17 00:00:00 2001
From: Damyon Wiese <damyon@moodle.com>
Date: Wed, 18 Mar 2015 16:10:27 +0800
Subject: [PATCH] (Poor) Generator for lesson attempts.

---
 admin/tool/generator/classes/course_backend.php | 52 ++++++++++++++++++++++---
 admin/tool/generator/lang/en/tool_generator.php |  1 +
 mod/lesson/pagetypes/truefalse.php              |  1 +
 mod/lesson/tests/generator/lib.php              | 29 ++++++++++++++
 4 files changed, 78 insertions(+), 5 deletions(-)

diff --git a/admin/tool/generator/classes/course_backend.php b/admin/tool/generator/classes/course_backend.php
index 2c2ca85..795afef 100644
--- a/admin/tool/generator/classes/course_backend.php
+++ b/admin/tool/generator/classes/course_backend.php
@@ -79,6 +79,16 @@ class tool_generator_course_backend extends tool_generator_backend {
     private static $paramforumposts = array(2, 2, 5, 10, 10, 10);
 
     /**
+     * @var array Number of lessons
+     */
+    private static $paramlessons = array(2, 2, 5, 10, 10, 10);
+
+    /**
+     * @var array Number of lesson attempts
+     */
+    private static $paramlessonattempts = array(2, 2, 5, 10, 10, 10);
+
+    /**
      * @var string Course shortname
      */
     private $shortname;
@@ -225,11 +235,12 @@ class tool_generator_course_backend extends tool_generator_backend {
         // Make course.
         $this->course = $this->create_course();
         $this->create_users();
-        $this->create_assignments();
-        $this->create_pages();
-        $this->create_small_files();
-        $this->create_big_files();
-        $this->create_forum();
+        //$this->create_assignments();
+        //$this->create_pages();
+        //$this->create_small_files();
+        //$this->create_big_files();
+        //$this->create_forum();
+        $this->create_lessons();
 
         // Log total time.
         $this->log('coursecompleted', round(microtime(true) - $entirestart, 1));
@@ -391,6 +402,37 @@ class tool_generator_course_backend extends tool_generator_backend {
     }
 
     /**
+     * Creates a number of lesson activities.
+     */
+    private function create_lessons() {
+        // Set up generator.
+        $modgenerator = $this->generator->get_plugin_generator('mod_lesson');
+
+        // Create lessons.
+        $number = self::$paramlessons[$this->size];
+        $attempts = self::$paramlessonattempts[$this->size];
+        $this->log('createlessons', $number * $attempts, true);
+        for ($i = 0; $i < $number; $i++) {
+            $record = array('course' => $this->course);
+            $options = array('section' => $this->get_target_section());
+            $lesson = $modgenerator->create_instance($record, $options);
+            $this->dot($i, $number);
+            $record = array('course' => $this->course, 'lessonid'=>$lesson->id);
+            $questionpage = $modgenerator->create_question_truefalse($lesson, $record);
+
+            for ($j = 0; $j < $attempts; $j++) {
+                $userid = $this::get_target_user();
+                $record = array('lesson' => $lesson->id, 'course' => $this->course->id,
+                        'userid' => $this->get_target_user(), 'pageid' => $questionpage->id);
+                $discussion = $modgenerator->create_question_truefalse_attempt($lesson, $record);
+                $this->dot($i * $number + $j, $number * $attempts);
+            }
+        }
+
+        $this->end_log();
+    }
+
+    /**
      * Creates a number of Page activities.
      */
     private function create_pages() {
diff --git a/admin/tool/generator/lang/en/tool_generator.php b/admin/tool/generator/lang/en/tool_generator.php
index 86247ec..9888155 100644
--- a/admin/tool/generator/lang/en/tool_generator.php
+++ b/admin/tool/generator/lang/en/tool_generator.php
@@ -74,6 +74,7 @@ $string['progress_createassignments'] = 'Creating assignments ({$a})';
 $string['progress_createbigfiles'] = 'Creating big files ({$a})';
 $string['progress_createcourse'] = 'Creating course {$a}';
 $string['progress_createforum'] = 'Creating forum ({$a} posts)';
+$string['progress_createlessons'] = 'Creating lessons ({$a} attempts)';
 $string['progress_createpages'] = 'Creating pages ({$a})';
 $string['progress_createsmallfiles'] = 'Creating small files ({$a})';
 $string['progress_enrol'] = 'Enrolling users into course ({$a})';
diff --git a/mod/lesson/pagetypes/truefalse.php b/mod/lesson/pagetypes/truefalse.php
index ae8fbaf..43343a1 100644
--- a/mod/lesson/pagetypes/truefalse.php
+++ b/mod/lesson/pagetypes/truefalse.php
@@ -86,6 +86,7 @@ class lesson_page_type_truefalse extends lesson_page {
         $params = array('answers'=>$answers, 'lessonid'=>$this->lesson->id, 'contents'=>$this->get_contents());
         $mform = new lesson_display_answer_form_truefalse($CFG->wwwroot.'/mod/lesson/continue.php', $params);
         $data = $mform->get_data();
+        var_dump($data);
         require_sesskey();
 
         $result = parent::check_answer();
diff --git a/mod/lesson/tests/generator/lib.php b/mod/lesson/tests/generator/lib.php
index 0bad1af..79767bd 100644
--- a/mod/lesson/tests/generator/lib.php
+++ b/mod/lesson/tests/generator/lib.php
@@ -116,6 +116,35 @@ class mod_lesson_generator extends testing_module_generator {
     }
 
     /**
+     * Create True/false question attempt.
+     * @param object $lessonrecord
+     * @param array $record
+     * @return int
+     */
+    public function create_question_truefalse_attempt($lesson, $record = array()) {
+        global $DB, $CFG;
+        require_once($CFG->dirroot.'/mod/lesson/locallib.php');
+
+        $lesson = new lesson($lesson);
+        $page = $lesson->load_page($record['pageid']);
+
+        $context = context_module::instance($lesson->cmid);
+
+        $answers = $page->get_answers();
+
+        $attempt = new stdClass();
+        $attempt->lessonid = $lesson->id;
+        $attempt->pageid = $page->id;
+        $attempt->userid = $record['userid'];
+        $attempt->answerid = $answers[0]->id;
+        $attempt->retry = 0;
+        $attempt->correct = true;
+        $attempt->timeseen = time();
+        $attempt->id = $DB->insert_record("lesson_attempts", $attempt);
+        return $DB->get_record('lesson_attempts', array('id' => $attempt->id), '*', MUST_EXIST);
+    }
+
+    /**
      * Create True/false question pages.
      * @param object $lesson
      * @param array $record
-- 
1.8.3.2

