• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Data Structures
  • Files
  • File List
  • Globals

Modules/Test/classes/class.assMarkSchema.php

Go to the documentation of this file.
00001 <?php
00002  /*
00003    +----------------------------------------------------------------------------+
00004    | ILIAS open source                                                          |
00005    +----------------------------------------------------------------------------+
00006    | Copyright (c) 1998-2001 ILIAS open source, University of Cologne           |
00007    |                                                                            |
00008    | This program is free software; you can redistribute it and/or              |
00009    | modify it under the terms of the GNU General Public License                |
00010    | as published by the Free Software Foundation; either version 2             |
00011    | of the License, or (at your option) any later version.                     |
00012    |                                                                            |
00013    | This program is distributed in the hope that it will be useful,            |
00014    | but WITHOUT ANY WARRANTY; without even the implied warranty of             |
00015    | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the              |
00016    | GNU General Public License for more details.                               |
00017    |                                                                            |
00018    | You should have received a copy of the GNU General Public License          |
00019    | along with this program; if not, write to the Free Software                |
00020    | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | 
00021    +----------------------------------------------------------------------------+
00022 */
00023 
00024 include_once "./Modules/Test/classes/inc.AssessmentConstants.php";
00025 
00035 class ASS_MarkSchema 
00036 {
00044   var $mark_steps;
00045 
00053   function ASS_MarkSchema() 
00054   {
00055     $this->mark_steps = array();
00056   }
00057 
00075   function createSimpleSchema(
00076     $txt_failed_short = "failed", 
00077     $txt_failed_official = "failed", 
00078     $percentage_failed = 0,
00079                 $failed_passed = 0,
00080     $txt_passed_short = "passed",
00081     $txt_passed_official = "passed",
00082     $percentage_passed = 50,
00083                 $passed_passed = 1
00084   )
00085   {
00086     $this->flush();
00087     $this->addMarkStep($txt_failed_short, $txt_failed_official, $percentage_failed, $failed_passed);
00088     $this->addMarkStep($txt_passed_short, $txt_passed_official, $percentage_passed, $passed_passed);
00089   }
00090 
00104   function addMarkStep(
00105     $txt_short = "", 
00106     $txt_official = "", 
00107     $percentage = 0,
00108                 $passed = 0
00109   )
00110   {
00111                 include_once "./Modules/Test/classes/class.assMark.php";
00112     $mark = new ASS_Mark($txt_short, $txt_official, $percentage, $passed);
00113     array_push($this->mark_steps, $mark);
00114   }
00115 
00124   function saveToDb($test_id)
00125   {
00126                 global $lng;
00127                 global $ilDB;
00128 
00129                 $oldmarks = array();
00130                 include_once "./classes/class.ilObjAssessmentFolder.php";
00131                 if (ilObjAssessmentFolder::_enabledAssessmentLogging())
00132                 {
00133                         $query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
00134                                 $ilDB->quote($test_id)
00135                         );
00136                         $result = $ilDB->query($query);
00137                         if ($result->numRows())
00138                         {
00139                                 while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))
00140                                 {
00141                                         $oldmarks[$row["minimum_level"]] = $row;
00142                                 }
00143                         }
00144                 }
00145                 
00146     if (!$test_id) return;
00147     // Delete all entries
00148     $query = sprintf("DELETE FROM tst_mark WHERE test_fi = %s",
00149       $ilDB->quote($test_id)
00150     );
00151     $result = $ilDB->query($query);
00152     if (count($this->mark_steps) == 0) return;
00153     
00154     // Write new datasets
00155     foreach ($this->mark_steps as $key => $value) 
00156                 {
00157       $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)",
00158         $ilDB->quote($test_id),
00159         $ilDB->quote($value->getShortName()), 
00160         $ilDB->quote($value->getOfficialName()), 
00161         $ilDB->quote($value->getMinimumLevel()),
00162         $ilDB->quote(sprintf("%d", $value->getPassed()))
00163       );
00164       $result = $ilDB->query($query);
00165       if ($result == DB_OK) {
00166       }
00167     }
00168                 if (ilObjAssessmentFolder::_enabledAssessmentLogging())
00169                 {
00170                         $query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
00171                                 $ilDB->quote($test_id)
00172                         );
00173                         $result = $ilDB->query($query);
00174                         $newmarks = array();
00175                         if ($result->numRows())
00176                         {
00177                                 while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))
00178                                 {
00179                                         $newmarks[$row["minimum_level"]] = $row;
00180                                 }
00181                         }
00182                         foreach ($oldmarks as $level => $row)
00183                         {
00184                                 if (array_key_exists($level, $newmarks))
00185                                 {
00186                                         $difffields = array();
00187                                         foreach ($row as $key => $value)
00188                                         {
00189                                                 if (strcmp($value, $newmarks[$level][$key]) != 0)
00190                                                 {
00191                                                         switch ($key)
00192                                                         {
00193                                                                 case "mark_id":
00194                                                                 case "TIMESTAMP":
00195                                                                         break;
00196                                                                 default:
00197                                                                         array_push($difffields, "$key: $value => " .$newmarks[$level][$key]); 
00198                                                                         break;
00199                                                         }
00200                                                 }
00201                                         }
00202                                         if (count($difffields))
00203                                         {
00204                                                 $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_changed", ilObjAssessmentFolder::_getLogLanguage()) . ": " . join($difffields, ", "));
00205                                         }
00206                                 }
00207                                 else
00208                                 {
00209                                         $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_removed", ilObjAssessmentFolder::_getLogLanguage()) . ": " . 
00210                                                 $lng->txtlng("assessment", "tst_mark_minimum_level", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["minimum_level"] . ", " .
00211                                                 $lng->txtlng("assessment", "tst_mark_short_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["short_name"] . ", " .
00212                                                 $lng->txtlng("assessment", "tst_mark_official_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["official_name"] . ", " .
00213                                                 $lng->txtlng("assessment", "tst_mark_passed", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["passed"]);                                              
00214                                 }
00215                         }
00216                         foreach ($newmarks as $level => $row)
00217                         {
00218                                 if (!array_key_exists($level, $oldmarks))
00219                                 {
00220                                         $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_added", ilObjAssessmentFolder::_getLogLanguage()) . ": " . 
00221                                                 $lng->txtlng("assessment", "tst_mark_minimum_level", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["minimum_level"] . ", " .
00222                                                 $lng->txtlng("assessment", "tst_mark_short_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["short_name"] . ", " .
00223                                                 $lng->txtlng("assessment", "tst_mark_official_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["official_name"] . ", " .
00224                                                 $lng->txtlng("assessment", "tst_mark_passed", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["passed"]);
00225                                 }
00226                         }
00227                 }
00228   }
00229 
00238   function loadFromDb($test_id)
00239   {
00240                 global $ilDB;
00241                 
00242     if (!$test_id) return;
00243     $query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
00244       $ilDB->quote($test_id)
00245     );
00246 
00247     $result = $ilDB->query($query);
00248     if (strcmp(strtolower(get_class($result)), db_result) == 0) {
00249       while ($data = $result->fetchRow(DB_FETCHMODE_OBJECT)) {
00250         $this->addMarkStep($data->short_name, $data->official_name, $data->minimum_level, $data->passed);
00251       }
00252     }
00253   }
00254   
00263   function flush() {
00264     $this->mark_steps = array();
00265   }
00266   
00275   function sort() {
00276     function level_sort($a, $b) {
00277       if ($a->getMinimumLevel() == $b->getMinimumLevel()) {
00278         $res = strcmp($a->getShortName(), $b->getShortName());
00279         if ($res == 0) {
00280           return strcmp($a->getOfficialName(), $b->getOfficialName());
00281         } else {
00282           return $res;
00283         }
00284       }
00285       return ($a->getMinimumLevel() < $b->getMinimumLevel()) ? -1 : 1;
00286     }
00287     
00288     usort($this->mark_steps, 'level_sort');
00289   }
00290   
00300   function deleteMarkStep($index = 0) {
00301     if ($index < 0) return;
00302     if (count($this->mark_steps) < 1) return;
00303     if ($index >= count($this->mark_steps)) return;
00304     unset($this->mark_steps[$index]);
00305     $this->mark_steps = array_values($this->mark_steps);
00306   }
00307 
00317   function deleteMarkSteps($indexes) {
00318     foreach ($indexes as $key => $index) {
00319       if (!(($index < 0) or (count($this->mark_steps) < 1))) {
00320         unset($this->mark_steps[$index]);
00321       }
00322     }
00323     $this->mark_steps = array_values($this->mark_steps);
00324   }
00325 
00336   function getMatchingMark($percentage) {
00337     for ($i = count($this->mark_steps) - 1; $i >= 0; $i--) {
00338       if ($percentage >= $this->mark_steps[$i]->getMinimumLevel()) {
00339         return $this->mark_steps[$i];
00340       }
00341     }
00342                 return false;
00343   }
00344   
00356         function _getMatchingMark($test_id, $percentage)
00357         {
00358                 global $ilDB;
00359                 $query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level DESC",
00360                         $ilDB->quote($test_id . "")
00361                 );
00362                 $result = $ilDB->query($query);
00363                 while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))
00364                 {
00365                         if ($percentage >= $row["minimum_level"])
00366                         {
00367                                 return $row;
00368                         }
00369                 }
00370                 return FALSE;
00371         }
00372 
00384         function _getMatchingMarkFromObjId($a_obj_id, $percentage)
00385         {
00386                 global $ilDB;
00387                 $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",
00388                         $ilDB->quote($a_obj_id . "")
00389                 );
00390                 $result = $ilDB->query($query);
00391                 while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))
00392                 {
00393                         if ($percentage >= $row["minimum_level"])
00394                         {
00395                                 return $row;
00396                         }
00397                 }
00398                 return FALSE;
00399         }
00400         
00410         function checkMarks()
00411         {
00412                 $minimum_percentage = 100;
00413                 $passed = 0;
00414     for ($i = 0; $i < count($this->mark_steps); $i++) {
00415                         if ($this->mark_steps[$i]->getMinimumLevel() < $minimum_percentage)
00416                         {
00417                                 $minimum_percentage = $this->mark_steps[$i]->getMinimumLevel();
00418                         }
00419                         if ($this->mark_steps[$i]->getPassed())
00420                         {
00421                                 $passed++;
00422                         }
00423     }
00424                 if ($minimum_percentage != 0)
00425                 {
00426                         return "min_percentage_ne_0";
00427                 }
00428                 if ($passed == 0)
00429                 {
00430                         return "no_passed_mark";
00431                 }
00432                 return true;
00433         }
00434 
00444         function logAction($test_id, $logtext = "")
00445         {
00446                 global $ilUser;
00447                 include_once "./classes/class.ilObjAssessmentFolder.php";
00448                 ilObjAssessmentFolder::_addLog($ilUser->id, ilObjTest::_getObjectIDFromTestID($test_id), $logtext, "", "", TRUE, $_GET["ref_id"]);
00449         }
00450 }
00451 
00452 ?>

Generated on Fri Dec 13 2013 17:56:53 for ILIAS Release_3_9_x_branch .rev 46835 by  doxygen 1.7.1