From b805ffbd9ba766be2d56d7bade17664a8509c7d2 Mon Sep 17 00:00:00 2001
From: Damyon Wiese <damyon@moodle.com>
Date: Fri, 27 Feb 2015 11:49:43 +0800
Subject: [PATCH] Testing MDL-47911

---
 admin/tool/generator/classes/course_backend.php | 77 +++++++++++++++++++++++--
 admin/tool/generator/lang/en/tool_generator.php |  2 +
 lang/en/grades.php                              |  1 +
 3 files changed, 74 insertions(+), 6 deletions(-)

diff --git a/admin/tool/generator/classes/course_backend.php b/admin/tool/generator/classes/course_backend.php
index 20a0186..ceabe66 100644
--- a/admin/tool/generator/classes/course_backend.php
+++ b/admin/tool/generator/classes/course_backend.php
@@ -47,7 +47,7 @@ class tool_generator_course_backend extends tool_generator_backend {
     /**
      * @var array Number of students enrolled in course
      */
-    private static $paramusers = array(1, 100, 1000, 10000, 50000, 100000);
+    private static $paramusers = array(1, 100, 1000, 1000, 1000, 1000);
     /**
      * Total size of small files: 1KB, 1MB, 10MB, 100MB, 1GB, 2GB.
      *
@@ -79,6 +79,11 @@ class tool_generator_course_backend extends tool_generator_backend {
     private static $paramforumposts = array(2, 2, 5, 10, 10, 10);
 
     /**
+     * @var array Number of grade items
+     */
+    private static $paramgradeitems = array(2, 2, 5, 10, 100, 500);
+
+    /**
      * @var string Course shortname
      */
     private $shortname;
@@ -183,11 +188,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_grade_items();
 
         // Log total time.
         $this->log('coursecompleted', round(microtime(true) - $entirestart, 1));
@@ -343,6 +349,65 @@ class tool_generator_course_backend extends tool_generator_backend {
     }
 
     /**
+     * Creates a number of Grade items.
+     */
+    private function create_grade_items() {
+        global $CFG;
+
+        require_once($CFG->dirroot . '/lib/gradelib.php');
+        // Set up generator.
+        // Create manual grade items.
+        $number = self::$paramgradeitems[$this->size];
+        $numusers = self::$paramusers[$this->size];
+
+        $gradecategories = array();
+
+        $numcategories = intval($number / 10);
+        if ($numcategories == 0) {
+            $numcategories = 1;
+        }
+
+        $this->log('creategradecategories', $numcategories, true);
+        for ($i = 0; $i < $numcategories; $i++) {
+            $params = new stdClass();
+
+            $params->courseid = $this->course->id;
+            if ($i >= ($numcategories / 2)) {
+                // Make this a sub category.
+                $params->parent = $gradecategories[$i - ($numcategories / 2)]->id;
+            }
+            $params->fullname = 'testcategory' . $i;
+
+            $gradecategories[$i] = new grade_category($params, false);
+            $gradecategories[$i]->insert();
+
+            $this->dot($i, $numcategories);
+        }
+        $this->end_log();
+
+        $this->log('creategradeitems', $number, true);
+        for ($i = 0; $i < $number; $i++) {
+            $params = new stdClass();
+
+            $params->courseid = $this->course->id;
+            $params->categoryid = $gradecategories[$i % $numcategories]->id;
+            $params->itemname = 'gradeitem' . $i;
+            $params->itemtype = 'manual';
+            $params->grademax = 100;
+            $params->grademin = 0;
+
+            $grade_item = new grade_item($params, false);
+            $grade_item->insert();
+            for ($j = 0; $j < $numusers; $j++) {
+                $grade_item->update_final_grade($this->get_target_user(), rand(0, 100), 'gradebook', 'Feedback', FORMAT_MOODLE, 2);
+            }
+            $this->dot($i, $number);
+        }
+
+        $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..b4aeff4 100644
--- a/admin/tool/generator/lang/en/tool_generator.php
+++ b/admin/tool/generator/lang/en/tool_generator.php
@@ -76,6 +76,8 @@ $string['progress_createcourse'] = 'Creating course {$a}';
 $string['progress_createforum'] = 'Creating forum ({$a} posts)';
 $string['progress_createpages'] = 'Creating pages ({$a})';
 $string['progress_createsmallfiles'] = 'Creating small files ({$a})';
+$string['progress_creategradecategories'] = 'Creating grade categories ({$a})';
+$string['progress_creategradeitems'] = 'Creating grade items ({$a})';
 $string['progress_enrol'] = 'Enrolling users into course ({$a})';
 $string['progress_sitecompleted'] = 'Site completed ({$a}s)';
 $string['shortsize_0'] = 'XS';
diff --git a/lang/en/grades.php b/lang/en/grades.php
index e80d92e..67a66ed 100644
--- a/lang/en/grades.php
+++ b/lang/en/grades.php
@@ -582,6 +582,7 @@ $string['reprintheaders'] = 'Reprint headers';
 $string['resetweightsshort'] = 'Reset weights';
 $string['resetweights'] = 'Reset weights of {$a->itemname}';
 $string['respectingcurrentdata'] = 'leaving current configuration unmodified';
+$string['recalculatinggrades'] = 'Recalculating grades.';
 $string['rowpreviewnum'] = 'Preview rows';
 $string['savechanges'] = 'Save changes';
 $string['savepreferences'] = 'Save preferences';
-- 
1.8.3.2

