ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
ASS_MarkSchema Class Reference

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

+ Collaboration diagram for ASS_MarkSchema:

Public Member Functions

 __construct ()
 ASS_MarkSchema constructor. More...
 
 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. More...
 
 addMarkStep ( $txt_short="", $txt_official="", $percentage=0, $passed=0)
 Adds a mark step to the mark schema. More...
 
 saveToDb ($test_id)
 Saves an ASS_MarkSchema object to a database. More...
 
 loadFromDb ($test_id)
 Loads an ASS_MarkSchema object from a database. More...
 
 flush ()
 Empties the mark schema and removes all mark steps. More...
 
 sort ()
 Sorts the mark schema using the minimum level values. More...
 
 deleteMarkStep ($index=0)
 Deletes the mark step with a given index. More...
 
 deleteMarkSteps ($indexes)
 Deletes multiple mark steps using their index positions. More...
 
 getMatchingMark ($percentage)
 Returns the matching mark for a given percentage. More...
 
 checkMarks ()
 Check the marks for consistency. More...
 
 getMarkSteps ()
 
 setMarkSteps ($mark_steps)
 

Static Public Member Functions

static _getMatchingMark ($test_id, $percentage)
 Returns the matching mark for a given percentage. More...
 
static _getMatchingMarkFromObjId ($a_obj_id, $percentage)
 Returns the matching mark for a given percentage. More...
 

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
Maximilian Becker mbeck.nosp@m.er@d.nosp@m.ataba.nosp@m.y.de
Version
$Id$

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

Constructor & Destructor Documentation

◆ __construct()

ASS_MarkSchema::__construct ( )

ASS_MarkSchema constructor.

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

Returns
ASS_MarkSchema

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

References array.

29  {
30  $this->mark_steps = array();
31  }
Create styles array
The data for the language used.

Member Function Documentation

◆ _getMatchingMark()

static ASS_MarkSchema::_getMatchingMark (   $test_id,
  $percentage 
)
static

Returns the matching mark for a given percentage.

See also
$mark_steps
Parameters
integer$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.

PhpAssignmentInConditionInspection

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

References $ilDB, $result, $row, and array.

327  {
328  global $ilDB;
329  $result = $ilDB->queryF("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level DESC",
330  array('integer'),
331  array($test_id)
332  );
333 
335  while ($row = $ilDB->fetchAssoc($result))
336  {
337  if ($percentage >= $row["minimum_level"])
338  {
339  return $row;
340  }
341  }
342  return FALSE;
343  }
$result
Create styles array
The data for the language used.
global $ilDB

◆ _getMatchingMarkFromObjId()

static ASS_MarkSchema::_getMatchingMarkFromObjId (   $a_obj_id,
  $percentage 
)
static

Returns the matching mark for a given percentage.

See also
$mark_steps
Parameters
integer$a_obj_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.

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

References $ilDB, $result, $row, and array.

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

356  {
357  global $ilDB;
358  $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",
359  array('integer'),
360  array($a_obj_id)
361  );
362  while ($row = $ilDB->fetchAssoc($result))
363  {
364  if ($percentage >= $row["minimum_level"])
365  {
366  return $row;
367  }
368  }
369  return FALSE;
370  }
$result
Create styles array
The data for the language used.
global $ilDB
+ Here is the caller graph for this function:

◆ addMarkStep()

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.

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

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

Referenced by createSimpleSchema(), and loadFromDb().

76  {
77  require_once './Modules/Test/classes/class.assMark.php';
78  $mark = new ASS_Mark($txt_short, $txt_official, $percentage, $passed);
79  array_push($this->mark_steps, $mark);
80  }
A class defining marks for assessment test objects.
+ Here is the caller graph for this function:

◆ checkMarks()

ASS_MarkSchema::checkMarks ( )

Check the marks for consistency.

See also
$mark_steps
Returns
bool|string true if the check succeeds, als a text string containing a language string for an error message

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

410  {
411  $minimum_percentage = 100;
412  $passed = 0;
413  for ($i = 0; $i < count($this->mark_steps); $i++)
414  {
415  if ($this->mark_steps[$i]->getMinimumLevel() < $minimum_percentage)
416  {
417  $minimum_percentage = $this->mark_steps[$i]->getMinimumLevel();
418  }
419  if ($this->mark_steps[$i]->getPassed())
420  {
421  $passed++;
422  }
423  }
424 
425  if ($minimum_percentage != 0)
426  {
427  return "min_percentage_ne_0";
428  }
429 
430  if ($passed == 0)
431  {
432  return "no_passed_mark";
433  }
434  return true;
435  }

◆ createSimpleSchema()

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.

See also
$mark_steps
Parameters
string$txt_failed_shortThe short text of the failed mark.
string$txt_failed_officialThe official text of the failed mark.
float | int$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.
float | int$percentage_passedThe minimum percentage level reaching the passed mark.
integer$passed_passedIndicates the passed status of the passed mark (0 = failed, 1 = passed).

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

References addMarkStep(), and flush().

58  {
59  $this->flush();
60  $this->addMarkStep($txt_failed_short, $txt_failed_official, $percentage_failed, $failed_passed);
61  $this->addMarkStep($txt_passed_short, $txt_passed_official, $percentage_passed, $passed_passed);
62  }
flush()
Empties the mark schema and removes all mark steps.
addMarkStep( $txt_short="", $txt_official="", $percentage=0, $passed=0)
Adds a mark step to the mark schema.
+ Here is the call graph for this function:

◆ deleteMarkStep()

ASS_MarkSchema::deleteMarkStep (   $index = 0)

Deletes the mark step with a given index.

See also
$mark_steps
Parameters
integer$indexThe index of the mark step to delete.

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

266  {
267  if ($index < 0) return;
268  if (count($this->mark_steps) < 1) return;
269  if ($index >= count($this->mark_steps)) return;
270  unset($this->mark_steps[$index]);
271  $this->mark_steps = array_values($this->mark_steps);
272  }

◆ deleteMarkSteps()

ASS_MarkSchema::deleteMarkSteps (   $indexes)

Deletes multiple mark steps using their index positions.

See also
$mark_steps
Parameters
array$indexesAn array with all the index positions to delete.

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

282  {
283  foreach ($indexes as $key => $index)
284  {
285  if (!(($index < 0) or (count($this->mark_steps) < 1)))
286  {
287  unset($this->mark_steps[$index]);
288  }
289  }
290  $this->mark_steps = array_values($this->mark_steps);
291  }

◆ flush()

ASS_MarkSchema::flush ( )

Empties the mark schema and removes all mark steps.

See also
$mark_steps

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

References array.

Referenced by createSimpleSchema().

228  {
229  $this->mark_steps = array();
230  }
Create styles array
The data for the language used.
+ Here is the caller graph for this function:

◆ getMarkSteps()

ASS_MarkSchema::getMarkSteps ( )
Returns
ASS_Mark[]

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

References $mark_steps.

441  {
442  return $this->mark_steps;
443  }

◆ getMatchingMark()

ASS_MarkSchema::getMatchingMark (   $percentage)

Returns the matching mark for a given percentage.

See also
$mark_steps
Parameters
double$percentageA percentage value between 0 and 100.
Returns
ASS_Mark|bool The mark object, if a matching mark was found, false otherwise.

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

303  {
304  for ($i = count($this->mark_steps) - 1; $i >= 0; $i--)
305  {
306  $curMinLevel = $this->mark_steps[$i]->getMinimumLevel();
307 
308  if( $percentage > $curMinLevel || (string)$percentage == (string)$curMinLevel )
309  { // >= does NOT work since PHP is a fucking female float pig !!!!
310  return $this->mark_steps[$i];
311  }
312  }
313  return false;
314  }

◆ loadFromDb()

ASS_MarkSchema::loadFromDb (   $test_id)

Loads an ASS_MarkSchema object from a database.

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

PhpAssignmentInConditionInspection

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

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

204  {
205  global $ilDB;
206 
207  if (!$test_id) return;
208  $result = $ilDB->queryF("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
209  array('integer'),
210  array($test_id)
211  );
212  if ($result->numRows() > 0)
213  {
215  while ($data = $ilDB->fetchAssoc($result))
216  {
217  $this->addMarkStep($data["short_name"], $data["official_name"], $data["minimum_level"], $data["passed"]);
218  }
219  }
220  }
$result
addMarkStep( $txt_short="", $txt_official="", $percentage=0, $passed=0)
Adds a mark step to the mark schema.
Create styles array
The data for the language used.
global $ilDB
+ Here is the call graph for this function:

◆ saveToDb()

ASS_MarkSchema::saveToDb (   $test_id)

Saves an ASS_MarkSchema object to a database.

Parameters
integer$test_idThe database id of the related test.

PhpAssignmentInConditionInspection

PhpAssignmentInConditionInspection

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

References $ilDB, $lng, $result, $row, ilObjAssessmentFolder\_enabledAssessmentLogging(), ilObjAssessmentFolder\_getLogLanguage(), array, and time.

88  {
89  global $lng;
90  global $ilDB;
91 
92  $oldmarks = array();
93  include_once "./Modules/Test/classes/class.ilObjAssessmentFolder.php";
95  {
96  $result = $ilDB->queryF("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
97  array('integer'),
98  array($test_id)
99  );
100  if ($result->numRows())
101  {
103  while ($row = $ilDB->fetchAssoc($result))
104  {
105  $oldmarks[$row["minimum_level"]] = $row;
106  }
107  }
108  }
109 
110  if (!$test_id) return;
111  // Delete all entries
112  $ilDB->manipulateF("DELETE FROM tst_mark WHERE test_fi = %s",
113  array('integer'),
114  array($test_id)
115  );
116  if (count($this->mark_steps) == 0) return;
117 
118  // Write new datasets
119  foreach ($this->mark_steps as $key => $value)
120  {
121  $next_id = $ilDB->nextId('tst_mark');
122  $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)",
123  array('integer','integer','text','text','float','text','integer'),
124  array(
125  $next_id,
126  $test_id,
127  $value->getShortName(),
128  $value->getOfficialName(),
129  $value->getMinimumLevel(),
130  $value->getPassed(),
131  time()
132  )
133  );
134  }
136  {
137  $result = $ilDB->queryF("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
138  array('integer'),
139  array($test_id)
140  );
141  $newmarks = array();
142  if ($result->numRows())
143  {
145  while ($row = $ilDB->fetchAssoc($result))
146  {
147  $newmarks[$row["minimum_level"]] = $row;
148  }
149  }
150  foreach ($oldmarks as $level => $row)
151  {
152  if (array_key_exists($level, $newmarks))
153  {
154  $difffields = array();
155  foreach ($row as $key => $value)
156  {
157  if (strcmp($value, $newmarks[$level][$key]) != 0)
158  {
159  switch ($key)
160  {
161  case "mark_id":
162  case "tstamp":
163  break;
164  default:
165  array_push($difffields, "$key: $value => " .$newmarks[$level][$key]);
166  break;
167  }
168  }
169  }
170  if (count($difffields))
171  {
172  $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_changed", ilObjAssessmentFolder::_getLogLanguage()) . ": " . join($difffields, ", "));
173  }
174  }
175  else
176  {
177  $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_removed", ilObjAssessmentFolder::_getLogLanguage()) . ": " .
178  $lng->txtlng("assessment", "tst_mark_minimum_level", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["minimum_level"] . ", " .
179  $lng->txtlng("assessment", "tst_mark_short_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["short_name"] . ", " .
180  $lng->txtlng("assessment", "tst_mark_official_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["official_name"] . ", " .
181  $lng->txtlng("assessment", "tst_mark_passed", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["passed"]);
182  }
183  }
184  foreach ($newmarks as $level => $row)
185  {
186  if (!array_key_exists($level, $oldmarks))
187  {
188  $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_added", ilObjAssessmentFolder::_getLogLanguage()) . ": " .
189  $lng->txtlng("assessment", "tst_mark_minimum_level", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["minimum_level"] . ", " .
190  $lng->txtlng("assessment", "tst_mark_short_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["short_name"] . ", " .
191  $lng->txtlng("assessment", "tst_mark_official_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["official_name"] . ", " .
192  $lng->txtlng("assessment", "tst_mark_passed", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["passed"]);
193  }
194  }
195  }
196  }
$result
static _getLogLanguage()
retrieve the log language for assessment logging
static _enabledAssessmentLogging()
check wether assessment logging is enabled or not
Create styles array
The data for the language used.
global $lng
Definition: privfeed.php:17
global $ilDB
Add data(end) time
Method that wraps PHPs time in order to allow simulations with the workflow.
+ Here is the call graph for this function:

◆ setMarkSteps()

ASS_MarkSchema::setMarkSteps (   $mark_steps)
Parameters
ASS_Mark[]$mark_steps

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

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

449  {
450  $this->mark_steps = $mark_steps;
451  }
+ Here is the call graph for this function:

◆ sort()

ASS_MarkSchema::sort ( )

Sorts the mark schema using the minimum level values.

See also
$mark_steps

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

References $res.

238  {
239  function level_sort($a, $b)
240  {
241  if ($a->getMinimumLevel() == $b->getMinimumLevel())
242  {
243  $res = strcmp($a->getShortName(), $b->getShortName());
244  if ($res == 0)
245  {
246  return strcmp($a->getOfficialName(), $b->getOfficialName());
247  }
248  else
249  {
250  return $res;
251  }
252  }
253  return ($a->getMinimumLevel() < $b->getMinimumLevel()) ? -1 : 1;
254  }
255  usort($this->mark_steps, 'level_sort');
256  }

Field Documentation

◆ $mark_steps

ASS_MarkSchema::$mark_steps

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

Referenced by getMarkSteps(), and setMarkSteps().


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