added score display by each gradebook

skala
christian1827 16 years ago
parent 31e6bd6eef
commit 4e3aabc561
  1. 21
      main/admin/settings.php
  2. 113
      main/gradebook/gradebook_scoring_system.php
  3. 108
      main/gradebook/lib/scoredisplay.class.php
  4. 32
      main/install/update-db-1.8.6.2-1.8.7.inc.php

@ -35,7 +35,7 @@ $_SESSION['this_section'] = $this_section;
// Access restrictions
api_protect_admin_script();
/* this code is moved to gradebook_scoring_system file
if($_GET['category'] == 'Gradebook') {
// Used for the gradebook system
$htmlHeadXtra[]= '
@ -70,7 +70,7 @@ if($_GET['category'] == 'Gradebook') {
}
</script>';
}
*/
// Submit Stylesheets
if (isset($_POST['submit_stylesheets'])) {
$message = store_stylesheets();
@ -294,6 +294,7 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
/*
* Used to display custom values for the gradebook score display
*/
/* this configuration is moved now inside gradebook tool
case "gradebook_score_display_custom":
if(api_get_setting('gradebook_score_display_custom', 'my_display_custom') == 'false') {
$form->addElement('static', null, null, get_lang('GradebookActivateScoreDisplayCustom'));
@ -353,6 +354,8 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
}
}
break;
*/
}
}
@ -379,10 +382,10 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
//$result = Database::query($sql);
// Save the settings
$keys = array();
$gradebook_score_display_custom_values = array();
//$gradebook_score_display_custom_values = array();
foreach ($values as $key => $value) {
// Treat gradebook values in separate function
if(strpos($key, 'gradebook_score_display_custom_values') === false) {
//if(strpos($key, 'gradebook_score_display_custom_values') === false) {
if (!is_array($value)) {
//$sql = "UPDATE $table_settings_current SET selected_value='".Database::escape_string($value)."' WHERE variable='$key'";
//$result = Database::query($sql);
@ -415,14 +418,16 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
}
}
} else {
$gradebook_score_display_custom_values[$key] = $value;
}
//} else {
// $gradebook_score_display_custom_values[$key] = $value;
//}
}
/*
if(count($gradebook_score_display_custom_values) > 0) {
update_gradebook_score_display_custom_values($gradebook_score_display_custom_values);
}
*/
// add event configuration settings category to system log
$time = time();

@ -1,14 +1,123 @@
<?php // $Id: $
/* For licensing terms, see /license.txt */
$language_file= 'gradebook';
//$cidReset= true;
require_once '../inc/global.inc.php';
require_once 'lib/be.inc.php';
require_once 'lib/gradebook_functions.inc.php';
require_once 'lib/fe/scoredisplayform.class.php';
require_once 'lib/scoredisplay.class.php';
api_block_anonymous_users();
//api_protect_admin_script();
$htmlHeadXtra[]= '
<script language="JavaScript">
function plusItem(item)
{
document.getElementById(item).style.display = "inline";
document.getElementById("plus-"+item).style.display = "none";
document.getElementById("min-"+(item-1)).style.display = "none";
document.getElementById("min-"+(item)).style.display = "inline";
document.getElementById("plus-"+(item+1)).style.display = "inline";
document.getElementById("txta-"+(item)).value = "100";
document.getElementById("txta-"+(item-1)).value = "";
}
function minItem(item)
{
if (item != 1)
{
document.getElementById(item).style.display = "none";
document.getElementById("txta-"+item).value = "";
document.getElementById("txtb-"+item).value = "";
document.getElementById("plus-"+item).style.display = "inline";
document.getElementById("min-"+(item-1)).style.display = "inline";
document.getElementById("txta-"+(item-1)).value = "100";
}
if (item = 1)
{
document.getElementById("min-"+(item)).style.display = "none";
}
}
</script>';
$interbreadcrumb[] = array ('url' => $_SESSION['gradebook_dest'].'?selectcat=1', 'name' => get_lang('ToolGradebook'));
$select_cat = intval($_GET['selectcat']);
$displayscore= ScoreDisplay :: instance();
$customdisplays = $displayscore->get_custom_score_display_settings();
$nr_items =(count($customdisplays)!='0')?count($customdisplays):'1';
$scoreform= new ScoreDisplayForm('scoring_system_form', api_get_self() . '?selectcat=' . $select_cat);
if ($scoreform->validate()) {
$value_export='';
$value_export=$scoreform->exportValues();
$value_export=isset($value_export) ? $scoreform->exportValues(): '';
$values= $value_export;
// create new array of custom display settings
// this loop also checks if all score ranges are unique
$scoringdisplay= array ();
$ranges_ok = true;
$endscore= isset($values['endscore']) ? $values['endscore'] : null;
$displaytext=isset($values['displaytext']) ? $values['displaytext'] : null;
for ($counter= 1; $ranges_ok && $counter <= 20; $counter++) {
$setting= array ();
$setting['score']= $endscore[$counter];
$setting['display']= $displaytext[$counter];
if (!empty($setting['score'])) {
foreach ($scoringdisplay as $passed_entry) {
if ($passed_entry['score'] == $setting['score']) {
$ranges_ok = false;
}
}
$scoringdisplay[]= $setting;
}
}
if (!$ranges_ok) {
header('Location: ' . api_get_self() . '?nouniqueranges=&selectcat=' . $select_cat);
exit;
}
// update color settings
$val_enablescorecolor=isset($values['enablescorecolor']) ? $values['enablescorecolor'] : null;
$displayscore->set_coloring_enabled(($val_enablescorecolor == '1') ? true : false);
$scorecolpercent = 0;
if ($displayscore->is_coloring_enabled()) {
//$displayscore->set_color_split_value($values['scorecolpercent']);
$scorecolpercent = $values['scorecolpercent'];
}
// update custom display settings
$val_enablescore=isset($values['enablescore']) ? $values['enablescore'] : null;
$val_includeupperlimit=isset($values['includeupperlimit']) ? $values['includeupperlimit'] : null;
$displayscore->set_custom(($val_enablescore == '1') ? true : false);
$displayscore->set_upperlimit_included(($val_includeupperlimit == '1') ? true : false);
if ($displayscore->is_custom() && !empty($scoringdisplay)) {
$displayscore->update_custom_score_display_settings($scoringdisplay, $scorecolpercent);
}
header('Location: ' . api_get_self() . '?scoringupdated=&selectcat=' . $select_cat);
exit;
}
$this_section = SECTION_COURSES;
Display :: display_header(get_lang('ScoreEdit'));
if (((isset($_GET['isStudentView']) && $_GET['isStudentView']=='false') || (isset($_GET['selectcat']) && ($_SESSION['studentview']=='teacherview')))) {
if (isset ($_GET['scoringupdated'])) {
Display :: display_confirmation_message(get_lang('ScoringUpdated'),false);
}
if (isset ($_GET['nouniqueranges'])) {
Display :: display_error_message(get_lang('NoUniqueScoreRanges'),false);
}
echo '<div class="maincontent">';
Display::display_normal_message(sprintf(get_lang('GradebookScoringSystemRedirect'), api_get_path(WEB_CODE_PATH).'admin/settings.php?category=Gradebook'), false);
$scoreform->display();
echo '</div>';
}
Display :: display_footer();

@ -25,10 +25,10 @@ class ScoreDisplay
/**
* Get the instance of this class
*/
public static function instance() {
public static function instance($category_id = 0) {
static $instance;
if (!isset ($instance)) {
$instance = new ScoreDisplay();
$instance = new ScoreDisplay($category_id);
}
return $instance;
}
@ -61,19 +61,24 @@ class ScoreDisplay
private $coloring_enabled;
private $color_split_value;
private $custom_enabled;
private $upperlimit_included;
private $custom_display;
private $custom_display_conv;
private $custom_display_conv;
/**
* Protected constructor - call instance() to instantiate
*/
protected function ScoreDisplay() {
protected function ScoreDisplay($category_id = 0) {
if (!empty($category_id)) {
$this->category_id = $category_id;
}
$this->coloring_enabled = $this->load_bool_setting('gradebook_score_display_coloring',0);
if ($this->coloring_enabled) {
$this->color_split_value = $this->load_int_setting('gradebook_score_display_colorsplit',50);
//$this->color_split_value = $this->load_int_setting('gradebook_score_display_colorsplit',50);
$this->color_split_value = $this->get_score_color_percent();
}
$this->custom_enabled = $this->load_bool_setting('gradebook_score_display_custom', 0);
if ($this->custom_enabled) {
@ -157,27 +162,64 @@ class ScoreDisplay
return $this->color_split_value;
}
/**
* Get current gradebook category id
* @return int Category id
*/
private function get_current_gradebook_category_id() {
$tbl_gradebook_category = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
$curr_course_code = api_get_course_id();
$curr_session_id = api_get_session_id();
$session_condition = '';
if (empty($curr_session_id)) {
$session_condition = ' AND session_id is null ';
} else {
$session_condition = ' AND session_id = '.$curr_session_id;
}
$sql = 'SELECT id FROM '.$tbl_gradebook_category.' WHERE course_code = "'.$curr_course_code.'" '. $session_condition;
$rs = Database::query($sql);
$category_id = 0;
if (Database::num_rows($rs) > 0) {
$row = Database::fetch_row($rs);
$category_id = $row[0];
}
return $category_id;
}
/**
* Update custom score display settings
* @param array $displays 2-dimensional array - every subarray must have keys (score, display)
* @param int score color percent (optional)
* @param int gradebook category id (optional)
*/
public function update_custom_score_display_settings ($displays) {
public function update_custom_score_display_settings ($displays, $scorecolpercent = 0, $category_id = null) {
$this->custom_display = $displays;
$this->custom_display_conv = $this->convert_displays($this->custom_display);
if (isset($category_id)) {
$category_id = intval($category_id);
} else {
$category_id = $this->get_current_gradebook_category_id();
}
// remove previous settings
$tbl_display = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_SCORE_DISPLAY);
$sql = 'TRUNCATE TABLE '.$tbl_display;
$tbl_display = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_SCORE_DISPLAY);
$sql = 'DELETE FROM '.$tbl_display.' WHERE category_id = '.$category_id;
Database::query($sql);
// add new settings
$sql = 'INSERT INTO '.$tbl_display.' (id, score, display) VALUES ';
$sql = 'INSERT INTO '.$tbl_display.' (id, score, display, category_id, score_color_percent) VALUES ';
$count = 0;
foreach ($displays as $display) {
if ($count > 0) {
$sql .= ',';
}
$sql .= "(NULL, '".$display['score']."', '".Database::escape_string($display['display'])."')";
$sql .= "(NULL, '".$display['score']."', '".Database::escape_string($display['display'])."', ".$category_id.", ".intval($scorecolpercent).")";
$count++;
}
Database::query($sql);
@ -296,6 +338,34 @@ class ScoreDisplay
}
}
/**
* Get score color percent by category
* @param int Gradebook category id
* @return int Score
*/
private function get_score_color_percent($category_id = null) {
$tbl_display = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_SCORE_DISPLAY);
if (isset($category_id)) {
$category_id = intval($category_id);
} else {
$category_id = $this->get_current_gradebook_category_id();
}
$sql = 'SELECT score_color_percent FROM '.$tbl_display.' WHERE category_id = '.$category_id.' LIMIT 1';
$result = Database::query($sql);
$score = 0;
if (Database::num_rows($result) > 0) {
$row = Database::fetch_row($result);
$score = $row[0];
} else {
$score = $this->load_int_setting('gradebook_score_display_colorsplit',50);
}
return $score;
}
private function save_bool_setting ($property, $value) {
$this->save_int_setting ($property, ($value ? 'true' : 'false') );
@ -312,11 +382,19 @@ class ScoreDisplay
/**
* Get current custom score display settings
* @return array 2-dimensional array - every element contains 3 subelements (id, score, display)
* @param int Gradebook category id
* @return array 2-dimensional array - every element contains 3 subelements (id, score, display)
*/
private function get_custom_displays() {
$tbl_display = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_SCORE_DISPLAY);
$sql = 'SELECT * FROM '.$tbl_display.' ORDER BY score';
private function get_custom_displays($category_id = null) {
$tbl_display = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_SCORE_DISPLAY);
if (isset($category_id)) {
$category_id = intval($category_id);
} else {
$category_id = $this->get_current_gradebook_category_id();
}
$sql = 'SELECT * FROM '.$tbl_display.' WHERE category_id = '.$category_id.' ORDER BY score';
$result = Database::query($sql);
return Database::store_result($result);
}

@ -152,7 +152,7 @@ if (defined('SYSTEM_INSTALLATION')) {
Database::query($query);
}
// Moving user folowed by a human resource manager from hr_dept_id field to user_rel_user table
// Moving user followed by a human resource manager from hr_dept_id field to user_rel_user table
$query = "SELECT user_id, hr_dept_id FROM $dbNameForm.user";
$result = Database::query($query);
if (Database::num_rows($result) > 0) {
@ -175,6 +175,36 @@ if (defined('SYSTEM_INSTALLATION')) {
Database::query($upd);
}
// Updating score display for each gradebook category
// get all gradebook categories id
$a_categories = array();
$query = "SELECT id FROM $dbNameForm.gradebook_category";
$rs_gradebook = Database::query($query);
if (Database::num_rows($rs_gradebook) > 0) {
while($row_gradebook = Database::fetch_row($rs_gradebook)) {
$a_categories[] = $row_gradebook[0];
}
}
// get all gradebook score display
$query = "SELECT * FROM $dbNameForm.gradebook_score_display";
$rs_score_display = Database::query($query);
if (Database::num_rows($rs_score_display) > 0) {
$score_color_percent = api_get_setting('gradebook_score_display_colorsplit');
while ($row_score_display = Database::fetch_array($rs_score_display)) {
$score = $row_score_display['score'];
$display = $row_score_display['display'];
foreach ($a_categories as $category_id) {
$ins = "INSERT INTO $dbNameForm.gradebook_score_display(score, display, category_id, score_color_percent) VALUES('$score', '$display', $category_id, '$score_color_percent')";
Database::query($ins);
}
}
// remove score display with category id = 0
$del = "DELETE FROM $dbNameForm.gradebook_score_display WHERE category_id = 0";
Database::query($del);
}
// Now clean the deprecated id_coach field from the session_rel_course table
$m_q_list = get_sql_file_contents('migrate-db-'.$old_file_version.'-'.$new_file_version.'-post.sql', 'main');
if (count($m_q_list) > 0) {

Loading…
Cancel
Save