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

assessment/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 "./assessment/classes/inc.AssessmentConstants.php";
00025 
00036 class ASS_MarkSchema 
00037 {
00045   var $mark_steps;
00046 
00054   function ASS_MarkSchema() 
00055   {
00056     $this->mark_steps = array();
00057   }
00058 
00076   function create_simple_schema(
00077     $txt_failed_short = "failed", 
00078     $txt_failed_official = "failed", 
00079     $percentage_failed = 0,
00080                 $failed_passed = 0,
00081     $txt_passed_short = "passed",
00082     $txt_passed_official = "passed",
00083     $percentage_passed = 50,
00084                 $passed_passed = 1
00085   )
00086   {
00087     $this->flush();
00088     $this->add_mark_step($txt_failed_short, $txt_failed_official, $percentage_failed, $failed_passed);
00089     $this->add_mark_step($txt_passed_short, $txt_passed_official, $percentage_passed, $passed_passed);
00090   }
00091 
00105   function add_mark_step(
00106     $txt_short = "", 
00107     $txt_official = "", 
00108     $percentage = 0,
00109                 $passed = 0
00110   )
00111   {
00112                 include_once "./assessment/classes/class.assMark.php";
00113     $mark = new ASS_Mark($txt_short, $txt_official, $percentage, $passed);
00114     array_push($this->mark_steps, $mark);
00115   }
00116 
00125   function saveToDb($test_id)
00126   {
00127                 global $ilias, $lng;
00128                 $db =& $ilias->db->db;
00129 
00130                 $oldmarks = array();
00131                 include_once "./classes/class.ilObjAssessmentFolder.php";
00132                 if (ilObjAssessmentFolder::_enabledAssessmentLogging())
00133                 {
00134                         $query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
00135                                 $db->quote($test_id)
00136                         );
00137                         $result = $db->query($query);
00138                         if ($result->numRows())
00139                         {
00140                                 while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))
00141                                 {
00142                                         $oldmarks[$row["minimum_level"]] = $row;
00143                                 }
00144                         }
00145                 }
00146                 
00147     if (!$test_id) return;
00148     // Delete all entries
00149     $query = sprintf("DELETE FROM tst_mark WHERE test_fi = %s",
00150       $db->quote($test_id)
00151     );
00152     $result = $db->query($query);
00153     if (count($this->mark_steps) == 0) return;
00154     
00155     // Write new datasets
00156     foreach ($this->mark_steps as $key => $value) 
00157                 {
00158       $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)",
00159         $db->quote($test_id),
00160         $db->quote($value->get_short_name()), 
00161         $db->quote($value->get_official_name()), 
00162         $db->quote($value->get_minimum_level()),
00163         $db->quote(sprintf("%d", $value->get_passed()))
00164       );
00165       $result = $db->query($query);
00166       if ($result == DB_OK) {
00167       }
00168     }
00169                 if (ilObjAssessmentFolder::_enabledAssessmentLogging())
00170                 {
00171                         $query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
00172                                 $db->quote($test_id)
00173                         );
00174                         $result = $db->query($query);
00175                         $newmarks = array();
00176                         if ($result->numRows())
00177                         {
00178                                 while ($row = $result->fetchRow(DB_FETCHMODE_ASSOC))
00179                                 {
00180                                         $newmarks[$row["minimum_level"]] = $row;
00181                                 }
00182                         }
00183                         foreach ($oldmarks as $level => $row)
00184                         {
00185                                 if (array_key_exists($level, $newmarks))
00186                                 {
00187                                         $difffields = array();
00188                                         foreach ($row as $key => $value)
00189                                         {
00190                                                 if (strcmp($value, $newmarks[$level][$key]) != 0)
00191                                                 {
00192                                                         switch ($key)
00193                                                         {
00194                                                                 case "mark_id":
00195                                                                 case "TIMESTAMP":
00196                                                                         break;
00197                                                                 default:
00198                                                                         array_push($difffields, "$key: $value => " .$newmarks[$level][$key]); 
00199                                                                         break;
00200                                                         }
00201                                                 }
00202                                         }
00203                                         if (count($difffields))
00204                                         {
00205                                                 $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_changed", ilObjAssessmentFolder::_getLogLanguage()) . ": " . join($difffields, ", "));
00206                                         }
00207                                 }
00208                                 else
00209                                 {
00210                                         $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_removed", ilObjAssessmentFolder::_getLogLanguage()) . ": " . 
00211                                                 $lng->txtlng("assessment", "tst_mark_minimum_level", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["minimum_level"] . ", " .
00212                                                 $lng->txtlng("assessment", "tst_mark_short_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["short_name"] . ", " .
00213                                                 $lng->txtlng("assessment", "tst_mark_official_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["official_name"] . ", " .
00214                                                 $lng->txtlng("assessment", "tst_mark_passed", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["passed"]);                                              
00215                                 }
00216                         }
00217                         foreach ($newmarks as $level => $row)
00218                         {
00219                                 if (!array_key_exists($level, $oldmarks))
00220                                 {
00221                                         $this->logAction($test_id, $lng->txtlng("assessment", "log_mark_added", ilObjAssessmentFolder::_getLogLanguage()) . ": " . 
00222                                                 $lng->txtlng("assessment", "tst_mark_minimum_level", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["minimum_level"] . ", " .
00223                                                 $lng->txtlng("assessment", "tst_mark_short_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["short_name"] . ", " .
00224                                                 $lng->txtlng("assessment", "tst_mark_official_form", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["official_name"] . ", " .
00225                                                 $lng->txtlng("assessment", "tst_mark_passed", ilObjAssessmentFolder::_getLogLanguage()) . " = " . $row["passed"]);
00226                                 }
00227                         }
00228                 }
00229   }
00230 
00239   function loadFromDb($test_id)
00240   {
00241                 global $ilias;
00242                 $db =& $ilias->db->db;
00243                 
00244     if (!$test_id) return;
00245     $query = sprintf("SELECT * FROM tst_mark WHERE test_fi = %s ORDER BY minimum_level",
00246       $db->quote($test_id)
00247     );
00248 
00249     $result = $db->query($query);
00250     if (strcmp(strtolower(get_class($result)), db_result) == 0) {
00251       while ($data = $result->fetchRow(DB_FETCHMODE_OBJECT)) {
00252         $this->add_mark_step($data->short_name, $data->official_name, $data->minimum_level, $data->passed);
00253       }
00254     }
00255   }
00256   
00265   function flush() {
00266     $this->mark_steps = array();
00267   }
00268   
00277   function sort() {
00278     function level_sort($a, $b) {
00279       if ($a->get_minimum_level() == $b->get_minimum_level()) {
00280         $res = strcmp($a->get_short_name(), $b->get_short_name());
00281         if ($res == 0) {
00282           return strcmp($a->get_official_name(), $b->get_official_name());
00283         } else {
00284           return $res;
00285         }
00286       }
00287       return ($a->get_minimum_level() < $b->get_minimum_level()) ? -1 : 1;
00288     }
00289     
00290     usort($this->mark_steps, 'level_sort');
00291   }
00292   
00302   function delete_mark_step($index = 0) {
00303     if ($index < 0) return;
00304     if (count($this->mark_steps) < 1) return;
00305     if ($index >= count($this->mark_steps)) return;
00306     unset($this->mark_steps[$index]);
00307     $this->mark_steps = array_values($this->mark_steps);
00308   }
00309 
00319   function delete_mark_steps($indexes) {
00320     foreach ($indexes as $key => $index) {
00321       if (!(($index < 0) or (count($this->mark_steps) < 1))) {
00322         unset($this->mark_steps[$index]);
00323       }
00324     }
00325     $this->mark_steps = array_values($this->mark_steps);
00326   }
00327 
00338   function get_matching_mark($percentage) {
00339     for ($i = count($this->mark_steps) - 1; $i >= 0; $i--) {
00340       if ($percentage >= $this->mark_steps[$i]->get_minimum_level()) {
00341         return $this->mark_steps[$i];
00342       }
00343     }
00344                 return false;
00345   }
00346   
00356         function checkMarks()
00357         {
00358                 $minimum_percentage = 100;
00359                 $passed = 0;
00360     for ($i = 0; $i < count($this->mark_steps); $i++) {
00361                         if ($this->mark_steps[$i]->get_minimum_level() < $minimum_percentage)
00362                         {
00363                                 $minimum_percentage = $this->mark_steps[$i]->get_minimum_level();
00364                         }
00365                         if ($this->mark_steps[$i]->get_passed())
00366                         {
00367                                 $passed++;
00368                         }
00369     }
00370                 if ($minimum_percentage != 0)
00371                 {
00372                         return "min_percentage_ne_0";
00373                 }
00374                 if ($passed == 0)
00375                 {
00376                         return "no_passed_mark";
00377                 }
00378                 return true;
00379         }
00380 
00390         function logAction($test_id, $logtext = "")
00391         {
00392                 global $ilUser;
00393                 include_once "./classes/class.ilObjAssessmentFolder.php";
00394                 ilObjAssessmentFolder::_addLog($ilUser->id, ilObjTest::_getObjectIDFromTestID($test_id), $logtext);
00395         }
00396 }
00397 
00398 ?>

Generated on Fri Dec 13 2013 11:57:52 for ILIAS Release_3_6_x_branch .rev 46809 by  doxygen 1.7.1