From 4e3aabc5610fca5c94e469b026a4526d4d4e5be9 Mon Sep 17 00:00:00 2001 From: christian1827 Date: Fri, 23 Apr 2010 20:53:04 -0500 Subject: [PATCH] added score display by each gradebook --- main/admin/settings.php | 21 ++-- main/gradebook/gradebook_scoring_system.php | 113 ++++++++++++++++++- main/gradebook/lib/scoredisplay.class.php | 108 +++++++++++++++--- main/install/update-db-1.8.6.2-1.8.7.inc.php | 32 +++++- 4 files changed, 248 insertions(+), 26 deletions(-) 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) {