ILIAS  Release_3_10_x_branch Revision 61812
 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.
 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 a mark step.
 deleteMarkSteps ($indexes)
 Deletes multiple mark steps.
 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.
 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.

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 16509 2008-04-29 16:41:35Z hschottm

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

Member Function Documentation

ASS_MarkSchema::_getMatchingMark (   $test_id,
  $percentage 
)

Returns the matching mark for a given 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 362 of file class.assMarkSchema.php.

References $result.

{
global $ilDB;
$query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level DESC",
$ilDB->quote($test_id . "")
);
$result = $ilDB->query($query);
while ($row = $result->fetchRow(MDB2_FETCHMODE_ASSOC))
{
if ($percentage >= $row["minimum_level"])
{
return $row;
}
}
return FALSE;
}
ASS_MarkSchema::_getMatchingMarkFromObjId (   $a_obj_id,
  $percentage 
)

Returns the matching mark for a given 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 390 of file class.assMarkSchema.php.

References $result.

Referenced by ilObjTestAccess\_getPassedUsers(), and ilObjTestAccess\_isPassed().

{
global $ilDB;
$query = sprintf("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",
$ilDB->quote($a_obj_id . "")
);
$result = $ilDB->query($query);
while ($row = $result->fetchRow(MDB2_FETCHMODE_ASSOC))
{
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.

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 104 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 53 of file class.assMarkSchema.php.

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

Check the marks for consistency.

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 416 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.

Creates a simple mark schema for two mark steps: failed an 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 75 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 a mark step.

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 306 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.

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 323 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.

Empties the mark schema and removes all mark steps

public

See Also
$mark_steps

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

Referenced by createSimpleSchema().

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

+ Here is the caller graph for this function:

ASS_MarkSchema::getMatchingMark (   $percentage)

Returns the matching mark for a given 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 342 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.

Loads a ASS_MarkSchema object from a database (experimental)

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

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

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

{
global $ilDB;
if (!$test_id) return;
$query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
$ilDB->quote($test_id)
);
$result = $ilDB->query($query);
if ($result->numRows() > 0)
{
while ($data = $result->fetchRow(MDB2_FETCHMODE_OBJECT))
{
$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.

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 450 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.

Saves a ASS_MarkSchema object to a database (experimental)

Parameters
integer$test_idThe database id of the related test public

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

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

{
global $lng;
global $ilDB;
$oldmarks = array();
include_once "./Modules/Test/classes/class.ilObjAssessmentFolder.php";
{
$query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
$ilDB->quote($test_id)
);
$result = $ilDB->query($query);
if ($result->numRows())
{
while ($row = $result->fetchRow(MDB2_FETCHMODE_ASSOC))
{
$oldmarks[$row["minimum_level"]] = $row;
}
}
}
if (!$test_id) return;
// Delete all entries
$query = sprintf("DELETE FROM tst_mark WHERE test_fi = %s",
$ilDB->quote($test_id)
);
$result = $ilDB->query($query);
if (count($this->mark_steps) == 0) return;
// Write new datasets
foreach ($this->mark_steps as $key => $value)
{
$query = sprintf("INSERT INTO tst_mark (mark_id, test_fi, short_name, official_name, minimum_level, passed, TIMESTAMP) VALUES (NULL, %s, %s, %s, %s, %s, NULL)",
$ilDB->quote($test_id),
$ilDB->quote($value->getShortName()),
$ilDB->quote($value->getOfficialName()),
$ilDB->quote($value->getMinimumLevel()),
$ilDB->quote(sprintf("%d", $value->getPassed()))
);
$result = $ilDB->query($query);
if (PEAR::isError($result))
{
global $ilias;
$ilias->raiseError($result->getMessage());
}
}
{
$query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
$ilDB->quote($test_id)
);
$result = $ilDB->query($query);
$newmarks = array();
if ($result->numRows())
{
while ($row = $result->fetchRow(MDB2_FETCHMODE_ASSOC))
{
$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 "TIMESTAMP":
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.

Sorts the mark schema using the minimum level values

public

See Also
$mark_steps

Definition at line 281 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 44 of file class.assMarkSchema.php.


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