ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
ASS_MarkSchema Class Reference

A class defining mark schemas for assessment test objects. More...

+ Collaboration diagram for ASS_MarkSchema:

Public Member Functions

 ASS_MarkSchema ()
 ASS_MarkSchema constructor.
 createSimpleSchema ($txt_failed_short="failed", $txt_failed_official="failed", $percentage_failed=0, $failed_passed=0, $txt_passed_short="passed", $txt_passed_official="passed", $percentage_passed=50, $passed_passed=1)
 Creates a simple mark schema for two mark steps: failed and passed.
 addMarkStep ($txt_short="", $txt_official="", $percentage=0, $passed=0)
 Adds a mark step to the mark schema.
 saveToDb ($test_id)
 Saves a ASS_MarkSchema object to a database.
 loadFromDb ($test_id)
 Loads a ASS_MarkSchema object from a database.
 flush ()
 Empties the mark schema and removes all mark steps.
 sort ()
 Sorts the mark schema using the minimum level values.
 deleteMarkStep ($index=0)
 Deletes the mark step with a given index.
 getMarkSteps ()
 deleteMarkSteps ($indexes)
 Deletes multiple mark steps using their index positions.
 getMatchingMark ($percentage)
 Returns the matching mark for a given percentage.
 _getMatchingMark ($test_id, $percentage)
 Returns the matching mark for a given percentage.
 _getMatchingMarkFromObjId ($a_obj_id, $percentage)
 Returns the matching mark for a given percentage.
 _getMatchingMarkFromActiveId ($active_id, $percentage)
 Returns the matching mark for a given percentage.
 checkMarks ()
 Check the marks for consistency.
 logAction ($test_id, $logtext="")
 Logs an action into the Test&Assessment log.

Data Fields

 $mark_steps

Detailed Description

A class defining mark schemas for assessment test objects.

Author
Helmut Schottmüller helmu.nosp@m.t.sc.nosp@m.hottm.nosp@m.uell.nosp@m.er@ma.nosp@m.c.co.nosp@m.m
Version
Id:
class.assMarkSchema.php 27712 2011-02-11 09:14:17Z hschottm

Definition at line 33 of file class.assMarkSchema.php.

Member Function Documentation

ASS_MarkSchema::_getMatchingMark (   $test_id,
  $percentage 
)

Returns the matching mark for a given percentage.

Parameters
int$test_idThe database id of the test
double$percentageA percentage value between 0 and 100
Returns
mixed The mark object, if a matching mark was found, false otherwise public
See Also
$mark_steps

Definition at line 354 of file class.assMarkSchema.php.

References $ilDB, and $row.

{
global $ilDB;
$result = $ilDB->queryF("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level DESC",
array('integer'),
array($test_id)
);
while ($row = $ilDB->fetchAssoc($result))
{
if ($percentage >= $row["minimum_level"])
{
return $row;
}
}
return FALSE;
}
ASS_MarkSchema::_getMatchingMarkFromActiveId (   $active_id,
  $percentage 
)

Returns the matching mark for a given percentage.

Parameters
int$test_idThe database id of the test
double$percentageA percentage value between 0 and 100
Returns
mixed The mark object, if a matching mark was found, false otherwise public
See Also
$mark_steps

Definition at line 406 of file class.assMarkSchema.php.

References $ilDB, and $row.

Referenced by assQuestion\_updateTestResultCache().

{
global $ilDB;
$result = $ilDB->queryF("SELECT tst_mark.* FROM tst_active, tst_mark, tst_tests WHERE tst_mark.test_fi = tst_tests.test_id AND tst_tests.test_id = tst_active.test_fi AND tst_active.active_id = %s ORDER BY minimum_level DESC",
array('integer'),
array($active_id)
);
while ($row = $ilDB->fetchAssoc($result))
{
if ($percentage >= $row["minimum_level"])
{
return $row;
}
}
return FALSE;
}

+ Here is the caller graph for this function:

ASS_MarkSchema::_getMatchingMarkFromObjId (   $a_obj_id,
  $percentage 
)

Returns the matching mark for a given percentage.

Parameters
int$test_idThe database id of the test
double$percentageA percentage value between 0 and 100
Returns
mixed The mark object, if a matching mark was found, false otherwise public
See Also
$mark_steps

Definition at line 380 of file class.assMarkSchema.php.

References $ilDB, and $row.

Referenced by ilObjTestAccess\_isPassed().

{
global $ilDB;
$result = $ilDB->queryF("SELECT tst_mark.* FROM tst_mark, tst_tests WHERE tst_mark.test_fi = tst_tests.test_id AND tst_tests.obj_fi = %s ORDER BY minimum_level DESC",
array('integer'),
array($a_obj_id)
);
while ($row = $ilDB->fetchAssoc($result))
{
if ($percentage >= $row["minimum_level"])
{
return $row;
}
}
return FALSE;
}

+ Here is the caller graph for this function:

ASS_MarkSchema::addMarkStep (   $txt_short = "",
  $txt_official = "",
  $percentage = 0,
  $passed = 0 
)

Adds a mark step to the mark schema.

A new ASS_Mark object will be created and stored in the $mark_steps array.

Parameters
string$txt_shortThe short text of the mark
string$txt_officialThe official text of the mark
double$percentageThe minimum percentage level reaching the mark
integer$passedThe passed status of the mark (0 = failed, 1 = passed) public
See Also
$mark_steps

Definition at line 96 of file class.assMarkSchema.php.

Referenced by createSimpleSchema(), and loadFromDb().

{
include_once "./Modules/Test/classes/class.assMark.php";
$mark = new ASS_Mark($txt_short, $txt_official, $percentage, $passed);
array_push($this->mark_steps, $mark);
}

+ Here is the caller graph for this function:

ASS_MarkSchema::ASS_MarkSchema ( )

ASS_MarkSchema constructor.

The constructor takes possible arguments an creates an instance of the ASS_MarkSchema object.

public

Definition at line 49 of file class.assMarkSchema.php.

{
$this->mark_steps = array();
}
ASS_MarkSchema::checkMarks ( )

Check the marks for consistency.

Returns
mixed true if the check succeeds, als a text string containing a language string for an error message public
See Also
$mark_steps

Definition at line 430 of file class.assMarkSchema.php.

{
$minimum_percentage = 100;
$passed = 0;
for ($i = 0; $i < count($this->mark_steps); $i++)
{
if ($this->mark_steps[$i]->getMinimumLevel() < $minimum_percentage)
{
$minimum_percentage = $this->mark_steps[$i]->getMinimumLevel();
}
if ($this->mark_steps[$i]->getPassed())
{
$passed++;
}
}
if ($minimum_percentage != 0)
{
return "min_percentage_ne_0";
}
if ($passed == 0)
{
return "no_passed_mark";
}
return true;
}
ASS_MarkSchema::createSimpleSchema (   $txt_failed_short = "failed",
  $txt_failed_official = "failed",
  $percentage_failed = 0,
  $failed_passed = 0,
  $txt_passed_short = "passed",
  $txt_passed_official = "passed",
  $percentage_passed = 50,
  $passed_passed = 1 
)

Creates a simple mark schema for two mark steps: failed and passed.

Parameters
string$txt_failed_shortThe short text of the failed mark
string$txt_failed_officialThe official text of the failed mark
double$percentage_failedThe minimum percentage level reaching the failed mark
integer$failed_passedIndicates the passed status of the failed mark (0 = failed, 1 = passed)
string$txt_passed_shortThe short text of the passed mark
string$txt_passed_officialThe official text of the passed mark
double$percentage_passedThe minimum percentage level reaching the passed mark
integer$passed_passedIndicates the passed status of the passed mark (0 = failed, 1 = passed) public
See Also
$mark_steps

Definition at line 69 of file class.assMarkSchema.php.

References addMarkStep(), and flush().

{
$this->flush();
$this->addMarkStep($txt_failed_short, $txt_failed_official, $percentage_failed, $failed_passed);
$this->addMarkStep($txt_passed_short, $txt_passed_official, $percentage_passed, $passed_passed);
}

+ Here is the call graph for this function:

ASS_MarkSchema::deleteMarkStep (   $index = 0)

Deletes the mark step with a given index.

Parameters
integer$indexThe index of the mark step to delete public
See Also
$mark_steps

Definition at line 292 of file class.assMarkSchema.php.

{
if ($index < 0) return;
if (count($this->mark_steps) < 1) return;
if ($index >= count($this->mark_steps)) return;
unset($this->mark_steps[$index]);
$this->mark_steps = array_values($this->mark_steps);
}
ASS_MarkSchema::deleteMarkSteps (   $indexes)

Deletes multiple mark steps using their index positions.

Parameters
array$indexesAn array with all the index positions to delete public
See Also
$mark_steps

Definition at line 313 of file class.assMarkSchema.php.

{
foreach ($indexes as $key => $index)
{
if (!(($index < 0) or (count($this->mark_steps) < 1)))
{
unset($this->mark_steps[$index]);
}
}
$this->mark_steps = array_values($this->mark_steps);
}
ASS_MarkSchema::flush ( )

Empties the mark schema and removes all mark steps.

public

See Also
$mark_steps

Definition at line 253 of file class.assMarkSchema.php.

Referenced by createSimpleSchema().

{
$this->mark_steps = array();
}

+ Here is the caller graph for this function:

ASS_MarkSchema::getMarkSteps ( )

Definition at line 301 of file class.assMarkSchema.php.

References $mark_steps.

{
}
ASS_MarkSchema::getMatchingMark (   $percentage)

Returns the matching mark for a given percentage.

Parameters
double$percentageA percentage value between 0 and 100
Returns
mixed The mark object, if a matching mark was found, false otherwise public
See Also
$mark_steps

Definition at line 333 of file class.assMarkSchema.php.

{
for ($i = count($this->mark_steps) - 1; $i >= 0; $i--)
{
if ($percentage >= $this->mark_steps[$i]->getMinimumLevel())
{
return $this->mark_steps[$i];
}
}
return false;
}
ASS_MarkSchema::loadFromDb (   $test_id)

Loads a ASS_MarkSchema object from a database.

Parameters
integer$test_idA unique key which defines the test in the database public

Definition at line 229 of file class.assMarkSchema.php.

References $data, $ilDB, and addMarkStep().

{
global $ilDB;
if (!$test_id) return;
$result = $ilDB->queryF("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
array('integer'),
array($test_id)
);
if ($result->numRows() > 0)
{
while ($data = $ilDB->fetchAssoc($result))
{
$this->addMarkStep($data["short_name"], $data["official_name"], $data["minimum_level"], $data["passed"]);
}
}
}

+ Here is the call graph for this function:

ASS_MarkSchema::logAction (   $test_id,
  $logtext = "" 
)

Logs an action into the Test&Assessment log.

Parameters
integer$test_idThe database id of the test
string$logtextThe log text public

Definition at line 463 of file class.assMarkSchema.php.

References $_GET, ilObjAssessmentFolder\_addLog(), and ilObjTest\_getObjectIDFromTestID().

Referenced by saveToDb().

{
global $ilUser;
include_once "./Modules/Test/classes/class.ilObjAssessmentFolder.php";
ilObjAssessmentFolder::_addLog($ilUser->id, ilObjTest::_getObjectIDFromTestID($test_id), $logtext, "", "", TRUE, $_GET["ref_id"]);
}

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

ASS_MarkSchema::saveToDb (   $test_id)

Saves a ASS_MarkSchema object to a database.

Parameters
integer$test_idThe database id of the related test public

Definition at line 114 of file class.assMarkSchema.php.

References $ilDB, $lng, $row, ilObjAssessmentFolder\_enabledAssessmentLogging(), ilObjAssessmentFolder\_getLogLanguage(), and logAction().

{
global $lng;
global $ilDB;
$oldmarks = array();
include_once "./Modules/Test/classes/class.ilObjAssessmentFolder.php";
{
$result = $ilDB->queryF("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
array('integer'),
array($test_id)
);
if ($result->numRows())
{
while ($row = $ilDB->fetchAssoc($result))
{
$oldmarks[$row["minimum_level"]] = $row;
}
}
}
if (!$test_id) return;
// Delete all entries
$affectedRows = $ilDB->manipulateF("DELETE FROM tst_mark WHERE test_fi = %s",
array('integer'),
array($test_id)
);
if (count($this->mark_steps) == 0) return;
// Write new datasets
foreach ($this->mark_steps as $key => $value)
{
$next_id = $ilDB->nextId('tst_mark');
$affectedRows = $ilDB->manipulateF("INSERT INTO tst_mark (mark_id, test_fi, short_name, official_name, minimum_level, passed, tstamp) VALUES (%s, %s, %s, %s, %s, %s, %s)",
array('integer','integer','text','text','float','text','integer'),
array(
$next_id,
$test_id,
$value->getShortName(),
$value->getOfficialName(),
$value->getMinimumLevel(),
$value->getPassed(),
time()
)
);
}
{
$result = $ilDB->queryF("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
array('integer'),
array($test_id)
);
$newmarks = array();
if ($result->numRows())
{
while ($row = $ilDB->fetchAssoc($result))
{
$newmarks[$row["minimum_level"]] = $row;
}
}
foreach ($oldmarks as $level => $row)
{
if (array_key_exists($level, $newmarks))
{
$difffields = array();
foreach ($row as $key => $value)
{
if (strcmp($value, $newmarks[$level][$key]) != 0)
{
switch ($key)
{
case "mark_id":
case "tstamp":
break;
default:
array_push($difffields, "$key: $value => " .$newmarks[$level][$key]);
break;
}
}
}
if (count($difffields))
{
$this->logAction($test_id, $lng->txtlng("assessment", "log_mark_changed", ilObjAssessmentFolder::_getLogLanguage()) . ": " . join($difffields, ", "));
}
}
else
{
$this->logAction($test_id, $lng->txtlng("assessment", "log_mark_removed", ilObjAssessmentFolder::_getLogLanguage()) . ": " .
$lng->txtlng("assessment", "tst_mark_minimum_level", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["minimum_level"] . ", " .
$lng->txtlng("assessment", "tst_mark_short_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["short_name"] . ", " .
$lng->txtlng("assessment", "tst_mark_official_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["official_name"] . ", " .
$lng->txtlng("assessment", "tst_mark_passed", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["passed"]);
}
}
foreach ($newmarks as $level => $row)
{
if (!array_key_exists($level, $oldmarks))
{
$this->logAction($test_id, $lng->txtlng("assessment", "log_mark_added", ilObjAssessmentFolder::_getLogLanguage()) . ": " .
$lng->txtlng("assessment", "tst_mark_minimum_level", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["minimum_level"] . ", " .
$lng->txtlng("assessment", "tst_mark_short_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["short_name"] . ", " .
$lng->txtlng("assessment", "tst_mark_official_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["official_name"] . ", " .
$lng->txtlng("assessment", "tst_mark_passed", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["passed"]);
}
}
}
}

+ Here is the call graph for this function:

ASS_MarkSchema::sort ( )

Sorts the mark schema using the minimum level values.

public

See Also
$mark_steps

Definition at line 264 of file class.assMarkSchema.php.

References $res.

{
function level_sort($a, $b)
{
if ($a->getMinimumLevel() == $b->getMinimumLevel())
{
$res = strcmp($a->getShortName(), $b->getShortName());
if ($res == 0)
{
return strcmp($a->getOfficialName(), $b->getOfficialName());
}
else
{
return $res;
}
}
return ($a->getMinimumLevel() < $b->getMinimumLevel()) ? -1 : 1;
}
usort($this->mark_steps, 'level_sort');
}

Field Documentation

ASS_MarkSchema::$mark_steps

Definition at line 40 of file class.assMarkSchema.php.

Referenced by getMarkSteps().


The documentation for this class was generated from the following file: