MDL-9506 First draft of gradelib, and the stubs for the unit tests.

This commit is contained in:
nicolasconnault 2007-04-23 09:00:32 +00:00
parent a788917045
commit 5834dcdb1d
2 changed files with 526 additions and 0 deletions

438
lib/gradelib.php Normal file
View File

@ -0,0 +1,438 @@
<?php // $Id$
///////////////////////////////////////////////////////////////////////////
// //
// NOTICE OF COPYRIGHT //
// //
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// http://moodle.com //
// //
// Copyright (C) 2001-2003 Martin Dougiamas http://dougiamas.com //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details: //
// //
// http://www.gnu.org/copyleft/gpl.html //
// //
///////////////////////////////////////////////////////////////////////////
/**
* Library of functions for Gradebook
*
* @author Moodle HQ developers
* @version $Id$
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package moodlecore
*/
/**
* Extracts from the Gradebook all the Grade Items attached to the calling object.
* For example, an assignment may want to retrieve all the grade_items for itself,
* and get three outcome scales in return. This will affect the grading interface.
*
* Note: Each parameter refines the search. So if you only give the courseid,
* all the grade_items for this course will be returned. If you add the
* itemtype 'mod', all grade_items for this courseif AND for the 'mod'
* type will be returned, etc...
*
* @param int $courseid The id of the course to which the Grade Items belong
* @param string $itemname The name of the grade item
* @param string $itemtype 'mod', 'blocks', 'import', 'calculated' etc
* @param string $itemmodule 'forum, 'quiz', 'csv' etc
* @param int $iteminstance id of the item module
* @param int $itemnumber Can be used to distinguish multiple grades for an activity
* @param int $idnumber Grade Item Primary Key
* @return array An array of Grade Items
*/
function grade_get_items($courseid, $itemname=NULL, $itemtype=NULL, $itemmodule=NULL, $iteminstance=NULL, $itemnumber=NULL, $idnumber=NULL)
{
}
/**
* Creates a new grade_item in case it doesn't exist. This function would be called when a module
* is created or updates, for example, to ensure grade_item entries exist.
* It's not essential though--if grades are being added later and a matching grade_item doesn't
* yet exist, the gradebook will create them on the fly.
*
* @param
* @return mixed New grade_item id if successful
*/
function grade_create_item($params)
{
$grade_item = new Grade_Item($params);
return $grade_item->record();
}
/**
* For a given set of items, create a category to group them together (if one doesn't yet exist).
* Modules may want to do this when they are created. However, the ultimate control is in the gradebook interface itself.
*
* @param string $fullname The name of the new Category
* @param array $items An array of grade_items to group under the new Category
* @param string $aggregation
* @return mixed New grade_category id if successful
*/
function grade_create_category()
{
}
/**
* Tells a module whether a grade (or grade_item if $userid is not given) is currently locked or not.
* This is a combination of the actual settings in the grade tables and a check on moodle/course:editgradeswhenlocked.
* If it's locked to the current use then the module can print a nice message or prevent editing in the module.
*
* @param string $itemtype 'mod', 'blocks', 'import', 'calculated' etc
* @param string $itemmodule 'forum, 'quiz', 'csv' etc
* @param int $iteminstance id of the item module
* @param int $userid ID of the user who owns the grade
* @return boolean Whether the grade is locked or not
*/
function grade_is_locked($itemtype, $itemmodule, $iteminstance, $userid=NULL)
{
}
/**
* Class representing a Grade Item. It is responsible for handling its DB representation,
* modifying and returning its metadata.
*/
class Grade_Item
{
/**
* The table name
* @var string $tablename
*/
var $tablename = 'grade_items';
/**
* The Grade_Item PK.
* @var int $id The Grade_Item PK
*/
var $id;
/**
* The course this Grade_Item belongs to.
* @var int $courseid
*/
var $courseid;
/**
* The Category this Grade_Item belongs to (optional).
* @var int $categoryid
*/
var $categoryid;
/**
* The name of this Grade_Item (pushed by the module).
* @var string $itemname
*/
var $itemname;
/**
* e.g. 'mod', 'blocks', 'import', 'calculate' etc...
* @var string $itemtype
*/
var $itemtype;
/**
* The module pushing this grade (e.g. 'forum', 'quiz', 'assignment' etc).
* @var string $itemmodule
*/
var $itemmodule;
/**
* ID of the item module
* @var int $iteminstance
*/
var $iteminstance;
/**
* Number of the item in a series of multiple grades pushed by an activity.
* @var int $itemnumber
*/
var $itemnumber;
/**
* The type of grade (0 = value, 1 = scale, 2 = text)
* @var int $gradetype
*/
var $gradetype;
/**
* Maximum allowable grade.
* @var float $grademax
*/
var $grademax;
/**
* Minimum allowable grade.
* @var float $grademin
*/
var $grademin;
/**
* The scale this grade is based on, if applicable.
* @var object $scale
*/
var $scale;
/**
* The Outcome this grade is associated with, if applicable.
* @var object $outcome
*/
var $outcome;
/**
* Grade required to pass. (grademin < gradepass <= grademax)
* @var float $gradepass
*/
var $gradepass;
/**
* Multiply all grades by this number.
* @var float $multfactor
*/
var $multfactor;
/**
* Add this to all grades.
* @var float $plusfactor
*/
var $plusfactor;
/**
* Sorting order of the columns.
* @var int $sortorder
*/
var $sortorder;
/**
* Date until which to hide this Grade_Item. If null, 0 or false, Grade_Item is not hidden. Hiding prevents viewing.
* @var int $hidden
*/
var $hidden;
/**
* Date until which to lock this Grade_Item. If null, 0 or false, Grade_Item is not locked. Locking prevents updating.
* @var int $locked
*/
var $locked;
/**
* If set, the whole column will be recalculated, then this flag will be switched off.
* @var boolean $needsupdate
*/
var $needsupdate;
/**
* The first time this Grade_Item was created
* @var int $timecreated
*/
var $timecreated;
/**
* The last time this Grade_Item was modified
* @var int $timemodified
*/
var $timemodified;
/**
* Constructor
*/
function Grade_Item()
{
global $CFG;
$this->tablename = $CFG->prefix . $this->tablename;
}
/**
* Inserts the Grade Item object as a new record in the grade_items table.
*/
function record()
{
}
function get_raw()
{
$grade_raw = get_record('grade_grades_raw', 'itemid', $this->id);
return $grade_raw;
}
/**
* Returns the raw value for this grade item (as imported by module or other source).
*
* @return mixed Grades_Raw object if found, or false.
*/
function get_final()
{
}
/**
* Returns this object's calculation.
* @return mixed $calculation A string if found, false otherwise.
*/
function get_calculation()
{
$grade_calculation = get_record('grade_calculations', 'itemid', $this->id);
if ($grade_calculation) {
return $grade_calculation->calculation;
} else {
return $grade_calculation;
}
}
/**
* Returns the Grade_Category object this Grade_Item belongs to (if any).
*
* @return mixed Grade_Category object if applicable, NULL otherwise
*/
function get_category()
{
if (!empty($this->categoryid)) {
$grade_category = new Grade_Category($this->category_id);
return $grade_category;
} else {
return null;
}
}
}
class Grade_Category
{
/**
* The table name
* @var string $tablename
*/
var $tablename = 'grade_categories';
/**
* The Grade_Category PK.
* @var int $id The Grade_Category PK
*/
var $id;
/**
* The course this Category belongs to.
* @var int $courseid
*/
var $courseid;
/**
* The Category this Category belongs to (optional).
* @var int $categoryid
*/
var $categoryid;
/**
* The name of this Category.
* @var string $fullname
*/
var $fullname;
/**
* A constant pointing to one of the predefined aggregation strategies (none, mean, median, sum etc) .
* @var int $aggregation
*/
var $aggregation;
/**
* Keep only the X highest items.
* @var int $keephigh
*/
var $keephigh;
/**
* Drop the X lowest items.
* @var int $droplow
*/
var $droplow;
/**
* Multiply total grade by this number.
* @var float $multfactor
*/
var $multfactor;
/**
* Add this to total grade.
* @var float $plusfactor
*/
var $plusfactor;
/**
* What final grade needs to be achieved to pass this item?
* @var float $gradepass
*/
var $gradepass;
/**
* Date until which to hide this Category. If null, 0 or false, Category is not hidden.
* @var int $hidden
*/
var $hidden;
/**
* Constructor
* @param object $params an object with named parameters for this category.
*/
function Grade_Category($params=NULL)
{
if (!empty($params) && (is_array($params) || is_object($params))) {
foreach ($params as $param => $value) {
if (method_exists($this, $param)) {
$this->$param = $value;
}
}
}
}
/**
* Finds and returns a Grade_Category object based on its ID number.
*
* @param int $id
* @param boolean $static Unless set to true, this method will also set $this object with the returned values.
* @return object Grade_Category object or false if none found.
*/
function get_by_id($id, $static=false)
{
if ($static) {
return Grade_Category::get_record(true, 'id', $id);
} else {
return $this->get_record(false, 'id', $id);
}
}
/**
* Finds and returns a Grade_Category object based on 1-3 field values.
*
* @param boolean $static Unless set to true, this method will also set $this object with the returned values.
* @param string $field1
* @param string $value1
* @param string $field2
* @param string $value2
* @param string $field3
* @param string $value3
* @param string $fields
* @return object Grade_Category object or false if none found.
*/
function get_record($static=false, $field1, $value1, $field2='', $value2='', $field3='', $value3='', $fields="*")
{
if ($grade_category = get_record('grade_categories', $field1, $value1, $field2, $value2, $field3, $value3, $fields)) {
if ($static) {
return $grade_category;
} else {
foreach ($grade_category as $param => $value) {
$this->$param = $value;
}
return $this;
}
} else {
return false;
}
}
}

View File

@ -0,0 +1,88 @@
<?php // $Id$
///////////////////////////////////////////////////////////////////////////
// //
// NOTICE OF COPYRIGHT //
// //
// Moodle - Modular Object-Oriented Dynamic Learning Environment //
// http://moodle.org //
// //
// Copyright (C) 1999-2004 Martin Dougiamas http://dougiamas.com //
// //
// This program is free software; you can redistribute it and/or modify //
// it under the terms of the GNU General Public License as published by //
// the Free Software Foundation; either version 2 of the License, or //
// (at your option) any later version. //
// //
// This program is distributed in the hope that it will be useful, //
// but WITHOUT ANY WARRANTY; without even the implied warranty of //
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the //
// GNU General Public License for more details: //
// //
// http://www.gnu.org/copyleft/gpl.html //
// //
///////////////////////////////////////////////////////////////////////////
/**
* Unit tests for (some of) ../gradelib.php.
*
* @author nicolas@moodle.com
* @license http://www.gnu.org/copyleft/gpl.html GNU Public License
* @package moodlecore
*/
/** $Id */
require_once(dirname(__FILE__) . '/../../config.php');
global $CFG;
require_once($CFG->libdir . '/simpletestlib.php');
require_once($CFG->libdir . '/gradelib.php');
class gradelib_test extends UnitTestCase {
/**
* Create temporary entries in the database for these tests.
*/
function setUp()
{
}
/**
* Delete temporary entries from the database
*/
function tearDown()
{
}
function test_grade_get_items()
{
$courseid = 1;
$itemmname = 'grade_item_1';
$itemtype = 'mod';
$itemmodule = 'quiz';
$grade_items = grade_get_items($courseid, $itemname, $itemtype, $itemmodule);
$this->assertTrue(is_array($grade_items));
$this->assertEqual(count($grade_items), 4);
}
function test_grade_create_item()
{
}
function test_grade_create_category()
{
}
function test_grade_is_locked()
{
}
}
?>