diff --git a/main/admin/settings.php b/main/admin/settings.php
index 8af9c491bc..a4639cc056 100755
--- a/main/admin/settings.php
+++ b/main/admin/settings.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') {
}
';
}
-
+*/
// 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();
diff --git a/main/gradebook/gradebook_scoring_system.php b/main/gradebook/gradebook_scoring_system.php
index 7de580b442..c301d7c925 100755
--- a/main/gradebook/gradebook_scoring_system.php
+++ b/main/gradebook/gradebook_scoring_system.php
@@ -1,14 +1,123 @@
+ 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";
+ }
+ }
+ ';
+
+$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 '
';
-Display::display_normal_message(sprintf(get_lang('GradebookScoringSystemRedirect'), api_get_path(WEB_CODE_PATH).'admin/settings.php?category=Gradebook'), false);
+$scoreform->display();
echo '
';
+}
Display :: display_footer();
diff --git a/main/gradebook/lib/scoredisplay.class.php b/main/gradebook/lib/scoredisplay.class.php
index c43f9ea87a..6934a481c1 100755
--- a/main/gradebook/lib/scoredisplay.class.php
+++ b/main/gradebook/lib/scoredisplay.class.php
@@ -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);
}
diff --git a/main/install/update-db-1.8.6.2-1.8.7.inc.php b/main/install/update-db-1.8.6.2-1.8.7.inc.php
index 8e553e8efa..b8f830ac98 100755
--- a/main/install/update-db-1.8.6.2-1.8.7.inc.php
+++ b/main/install/update-db-1.8.6.2-1.8.7.inc.php
@@ -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) {