Prechádzať zdrojové kódy

added score display by each gradebook

christian1827 15 rokov pred
rodič
commit
4e3aabc561

+ 13 - 8
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') {
 	  }
 	 </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();

+ 111 - 2
main/gradebook/gradebook_scoring_system.php

@@ -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();

+ 93 - 15
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);
 	}

+ 31 - 1
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) {