Adding gradebook parent/children behaviour see BT#3004 with DB changes

skala
Julio Montoya 14 years ago
parent 7ec26499f9
commit 07d5a01bee
  1. 19
      main/admin/settings.lib.php
  2. 204
      main/admin/settings.php
  3. 52
      main/course_info/infocours.php
  4. 14
      main/gradebook/gradebook_add_cat.php
  5. 5
      main/gradebook/gradebook_add_eval.php
  6. 49
      main/gradebook/gradebook_add_link.php
  7. 9
      main/gradebook/gradebook_edit_link.php
  8. 116
      main/gradebook/index.php
  9. 13
      main/gradebook/lib/be/attendancelink.class.php
  10. 21
      main/gradebook/lib/be/category.class.php
  11. 6
      main/gradebook/lib/be/dropboxlink.class.php
  12. 1
      main/gradebook/lib/be/evaluation.class.php
  13. 19
      main/gradebook/lib/be/exerciselink.class.php
  14. 4
      main/gradebook/lib/be/forumthreadlink.class.php
  15. 18
      main/gradebook/lib/be/learnpathlink.class.php
  16. 6
      main/gradebook/lib/be/studentpublicationlink.class.php
  17. 15
      main/gradebook/lib/be/surveylink.class.php
  18. 48
      main/gradebook/lib/fe/catform.class.php
  19. 223
      main/gradebook/lib/fe/displaygradebook.php
  20. 34
      main/gradebook/lib/fe/evalform.class.php
  21. 151
      main/gradebook/lib/fe/gradebooktable.class.php
  22. 37
      main/gradebook/lib/fe/linkaddeditform.class.php
  23. 14
      main/gradebook/lib/fe/linkform.class.php
  24. 15
      main/gradebook/lib/gradebook_data_generator.class.php
  25. 10
      main/gradebook/lib/gradebook_functions.inc.php
  26. 4
      main/inc/lib/add_course.lib.inc.php
  27. 2
      main/inc/lib/database.lib.php
  28. 83
      main/inc/lib/main_api.lib.php
  29. 17
      main/install/migrate-db-1.8.8-1.9.0-pre.sql

@ -11,20 +11,7 @@
* @package chamilo.admin
*/
/**
* The function that retrieves all the possible settings for a certain config setting
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
*/
function get_settings_options($var) {
$table_settings_options = Database :: get_main_table(TABLE_MAIN_SETTINGS_OPTIONS);
$sql = "SELECT * FROM $table_settings_options WHERE variable='$var'";
$result = Database::query($sql);
while ($row = Database::fetch_array($result)) {
$temp_array = array ('value' => $row['value'], 'display_text' => $row['display_text']);
$settings_options_array[] = $temp_array;
}
return $settings_options_array;
}
/**
* This function allows easy activating and inactivating of plugins
@ -512,7 +499,7 @@ function handle_search() {
$values = get_settings_options('search_enabled');
$values = api_get_settings_options('search_enabled');
$form->addElement('header', null, get_lang('SearchEnabledTitle'));
$group = array ();
@ -549,7 +536,7 @@ function handle_search() {
// Search_show_unlinked_results.
//$form->addElement('header', null, get_lang('SearchShowUnlinkedResultsTitle'));
//$form->addElement('label', null, get_lang('SearchShowUnlinkedResultsComment'));
$values = get_settings_options('search_show_unlinked_results');
$values = api_get_settings_options('search_show_unlinked_results');
$group = array ();
foreach ($values as $key => $value) {
$element = & $form->createElement('radio', 'search_show_unlinked_results', '', get_lang($value['display_text']), $value['value']);

@ -26,7 +26,6 @@ $cidReset = true;
// Including some necessary library files.
require_once '../inc/global.inc.php';
require_once api_get_path(LIBRARY_PATH).'formvalidator/FormValidator.class.php';
require_once api_get_path(LIBRARY_PATH).'fileManage.lib.php';
require_once api_get_path(LIBRARY_PATH).'fileUpload.lib.php';
require_once api_get_path(LIBRARY_PATH).'dashboard.lib.php';
@ -63,15 +62,44 @@ if (isset($_GET['delete_watermark'])) {
$watermark_deleted = PDF::delete_watermark();
}
if (isset($_POST['new_model']) && isset($_POST['number_evaluations']) && !empty($_POST['new_model'])) {
$count = intval($_POST['number_evaluations']);
$string_to_save = '';
for ($i = 1; $i<=$count;$i++) {
$sum = "+";
if ($i == $count) {
$sum = "";
}
//Note: We use rand here because there is a unique index in the settings_options table. The 'variable' and 'value' fields must be unique
$string_to_save .= rand(1, 3).'*X'.$sum;
}
$string_to_save .= "/".$count;
$array_to_save = array();
$array_to_save['variable'] = 'grading_model';
$array_to_save['display_text'] = $_POST['new_model'];
$array_to_save['value'] = $string_to_save;
var_dump($array_to_save);
$result = api_set_setting_option($array_to_save);
}
if (isset($_GET['action']) && $_GET['action'] == 'delete_grading') {
$id = intval($_GET['id']);
api_delete_setting_option($id);
}
// Build the form.
if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', 'stylesheets', 'Search'))) {
$form = new FormValidator('settings', 'post', 'settings.php?category='.$_GET['category']);
$renderer = & $form->defaultRenderer();
$renderer->setElementTemplate('<div class="row"><div class="label">{label}</div><div class="formw">{element}<!-- BEGIN label_2 --><span class="help-block">{label_2}</span><!-- END label_2 --></div></div>');
/*$renderer->setHeaderTemplate('<div class="sectiontitle">{header}</div>');
$renderer->setElementTemplate('<div class="sectionvalue">{element}</div><div class="sectioncomment">{label}</div>'."\n");*/
//$renderer->setHeaderTemplate('<div class="sectiontitle">{header}</div>');
$renderer->setElementTemplate('<div class="row"><div class="label">{label}</div><div class="formw">{element}<!-- BEGIN label_2 --><span class="help-block">{label_2}</span><!-- END label_2 --></div></div>');
$my_category = Database::escape_string($_GET['category']);
@ -109,6 +137,7 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
$default_values = array();
foreach ($settings as $row) {
// Settings to avoid
$rows_to_avoid = array('gradebook_enable');
if (in_array($row['variable'], $rows_to_avoid)) { continue; }
@ -155,7 +184,9 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
// There is no else{} statement because we load the default $row['selected_value'] of the main Chamilo site.
}
}
switch ($row['type']) {
case 'textfield':
if ($row['variable'] == 'account_valid_duration') {
@ -219,7 +250,7 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
}
break;
case 'radio':
$values = get_settings_options($row['variable']);
$values = api_get_settings_options($row['variable']);
$group = array ();
if (is_array($values )) {
foreach ($values as $key => $value) {
@ -284,6 +315,69 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
$form->addElement('select', $row['variable'], array(get_lang($row['title']), get_lang($row['comment'])), call_user_func('select_'.$row['variable']), $hideme);
$default_values[$row['variable']] = $row['selected_value'];
break;
case 'custom_gradebook':
case 'custom':
$values = api_get_settings_options($row['variable']);
//$renderer = & $form->defaultRenderer();
//$renderer->setElementTemplate('{label} - {element}<!-- BEGIN label_2 --><span class="help-block">{label_2}</span><!-- END label_2 -->');
$numbers = array();
for($j=1;$j<=20;$j++) {
$numbers[$j] = $j;
}
if (!empty($values)) {
foreach($values as $option) {
$group = array();
$id = $option['id'];
$option_id = $row['variable']."[$id]";
$group[] = $form->createElement('text', $option_id.'[display_text]', array(get_lang($row['title']), get_lang($row['comment'])),'class="begin_model"');
$default_values[$option_id.'[display_text]'] = $option['display_text'];
$parts = api_grading_model_functions($option['value'], 'to_array');
$denominator = $parts['denominator'];
$j = 1;
foreach($parts['items'] as $item) {
$letter = $item['letter'];
$value = $item['value'];
$group[] =$form->createElement('static','<div>');
$class = 'number';
if ($j == 1) {
$class = 'first_number';
}
$group[] = $form->createElement('select', $option_id.'[items]['.$j.']', array('dd'), $numbers, array('class'=>$class));
$sum = ' ';
if ($j != count($parts['items'])) {
$sum = ' + ';
}
//$group[] =$form->createElement('static',' * '.$letter.$sum);
$default_values[$option_id.'[items]['.$j.']'] = $value;
$j++;
}
$group[] = $form->createElement('select', $option_id.'[denominator]', array('/'), $numbers,'class="denominator"');
$group[] = $form->createElement('button', "delete", get_lang('Delete'), array('type'=>'button', 'id'=>$id, 'onclick'=>"delete_grading_model('$id');"));
$default_values[$option_id.'[denominator]'] = $denominator;
$form->addGroup($group, '', get_lang($row['title']), ' ');
}
}
//New Grading Model form
$group = array();
$group[] = $form->createElement('text', 'new_model', array(get_lang('AddNewModel')));
$group[] = $form->createElement('select', 'number_evaluations', array(''), $numbers,'');
$form->addGroup($group, '', get_lang('AddNewModel'), "&nbsp;&nbsp;".get_lang('NumberOfSubEvalidations')."&nbsp;");
$form->addElement('style_submit_button', null, get_lang('Add'), 'class="add"');
break;
/*
* Used to display custom values for the gradebook score display
*/
@ -348,8 +442,7 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
}
break;
*/
}
}
if ($row['variable'] == 'pdf_export_watermark_enable') {
$url = PDF::get_watermark($course_code);
@ -363,9 +456,7 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
}
if ($row['variable'] == 'timezone_value') {
$form->addElement('html', sprintf(get_lang('LocalTimeUsingPortalTimezoneXIsY'),$row['selected_value'],api_get_local_time()));
}
}
}
$form->addElement('html', '<div style="text-align: right; clear: both;">');
@ -413,14 +504,13 @@ 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();
foreach ($values as $key => $value) {
//$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 (!is_array($value)) {
$old_value = api_get_setting($key);
switch ($key) {
$old_value = api_get_setting($key);
switch ($key) {
case 'header_extra_content':
file_put_contents(api_get_path(SYS_PATH).api_get_home_path().'/header_extra_content.txt', $value);
$value = api_get_home_path().'/header_extra_content.txt';
@ -455,34 +545,42 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
$value = $old_value;
}
break;
}
if ($old_value != $value) $keys[] = $key;
$result = api_set_setting($key, $value, null, null, $_configuration['access_url']);
} else {
$sql = "SELECT subkey FROM $table_settings_current WHERE variable = '$key'";
$res = Database::query($sql);
$subkeys = array();
while ($row_subkeys = Database::fetch_array($res)) {
// If subkey is changed:
if ((isset($value[$row_subkeys['subkey']]) && api_get_setting($key, $row_subkeys['subkey']) == 'false') ||
(!isset($value[$row_subkeys['subkey']]) && api_get_setting($key, $row_subkeys['subkey']) == 'true')) {
$keys[] = $key;
break;
}
}
foreach ($value as $subkey => $subvalue) {
//$sql = "UPDATE $table_settings_current SET selected_value='true' WHERE variable='$key' AND subkey = '$subkey'";
//$result = Database::query($sql);
$result = api_set_setting($key, 'true', $subkey, null, $_configuration['access_url']);
}
if ($key == 'grading_model') {
foreach ($value as $my_key => $option) {
$array_to_save = array();
//build this: 1*X+2*X+3*X/4
$string_to_save = '';
foreach ($option['items'] as $item) {
$string_to_save .= $item.'*X+';
}
$string_to_save = substr($string_to_save, 0, strlen($string_to_save)- 1) . '/'.$option['denominator'];
$array_to_save['display_text'] = $option['display_text'];
$array_to_save['value'] = $string_to_save;
$array_to_save['id'] = $my_key;
$result = api_set_setting_option($array_to_save);
}
} else {
$sql = "SELECT subkey FROM $table_settings_current WHERE variable = '$key'";
$res = Database::query($sql);
$subkeys = array();
while ($row_subkeys = Database::fetch_array($res)) {
// If subkey is changed:
if ((isset($value[$row_subkeys['subkey']]) && api_get_setting($key, $row_subkeys['subkey']) == 'false') ||
(!isset($value[$row_subkeys['subkey']]) && api_get_setting($key, $row_subkeys['subkey']) == 'true')) {
$keys[] = $key;
break;
}
}
foreach ($value as $subkey => $subvalue) {
$result = api_set_setting($key, 'true', $subkey, null, $_configuration['access_url']);
}
}
}
}
@ -501,6 +599,34 @@ if (!empty($_GET['category']) && !in_array($_GET['category'], array('Plugins', '
}
}
$htmlHeadXtra[] = '<script language="javascript">
function delete_grading_model(id) {
window.location = "settings.php?category=Gradebook&action=delete_grading&id=" + id;
}
$(document).ready(function() {
var elements = ["B","C","D","E","F","G","H","I", "J", "K", "L","M","N","O","P","Q","R"];
var i = 0;
$(".formw").each(function(index) {
$(this).find("*").each(function(index2) {
if ($(this).hasClass("first_number")) {
$(this).before("<b>( A * </b>");
}
if ($(this).hasClass("denominator")) {
$(this).before("<b> \) / </b>");
}
if ($(this).hasClass("number")) {
$(this).before("<b> + " + elements[i] + " * </b>");
i++;
}
});
i = 0;
});
});
</script>';
// Including the header (banner).
Display :: display_header($tool_name);
@ -526,6 +652,8 @@ $action_images['timezones'] = 'timezone.png';
$action_images['extra'] = 'wizard.png';
$action_images['tracking'] = 'statistics.png';
$action_images['gradebook2'] = 'gradebook.png';
// Grabbing the categories.
$resultcategories = api_get_settings_categories(array('stylesheets', 'Plugins', 'Templates', 'Search'));

@ -35,7 +35,6 @@ define('COURSE_CHANGE_PROPERTIES', 'COURSE_CHANGE_PROPERTIES');
$TABLECOURSE = Database :: get_main_table(TABLE_MAIN_COURSE);
$TABLEFACULTY = Database :: get_main_table(TABLE_MAIN_CATEGORY);
$TABLELANGUAGES = Database :: get_main_table(TABLE_MAIN_LANGUAGE);
$currentCourseID = $_course['sysCode'];
$currentCourseRepository = $_course['path'];
$is_allowedToEdit = $is_courseAdmin || $is_platformAdmin;
@ -232,6 +231,27 @@ $form->addElement('html', '</div></div>');
// Gradebook SETTINGS
//$form->addElement('html', '<div class="sectiontitle" style="margin-top: 40px;"><a href="#header" style="float:right;">'.Display::return_icon('top.gif', get_lang('Top')).'</a><a name="chatsettings" id="chatsettings"></a>'.Display::return_icon('chat.png', get_lang('ConfigChat'),'','22').' '.get_lang('ConfigChat').'</div>');
$form->addElement('html', '<div> <h3>'.Display::return_icon('gradebook.png', get_lang('Gradebook'),'','22').' '.get_lang('Gradebook').'</h3><div>');
$group = array();
$models = api_get_settings_options('grading_model');
foreach ($models as $option) {
$grading_parsed = api_grading_model_functions($option['value'], 'decorate');
$element = $form->createElement('radio', 'course_grading_model', '', $option['display_text'].': '.$grading_parsed, $option['id']);
$group[] = $element;
}
$element = $form->createElement('radio', 'course_grading_model', '', get_lang('None'), 0);
$group[] = $element;
$form->addGroup($group, '', array(get_lang('GradingModelTitle')), '', 'li', false); //julio
$form->addElement('style_submit_button', null, get_lang('SaveSettings'), 'class="save"');
$form->addElement('html', '</div></div>');
// USER RIGHTS
//$form->addElement('html', '<div class="sectiontitle" style="margin-top: 40px;"><a href="#header" style="float:right;">'.Display::return_icon('top.gif', get_lang('Top')).'</a><a name="userrights" id="userrights"></a>'.Display::return_icon('user.png', get_lang('UserRights'),'','22').' '.get_lang('UserRights').'</div>');
$form->addElement('html', '<div> <h3>'.Display::return_icon('user.png', get_lang('UserRights'),'','22').' '.get_lang('UserRights').'</h3><div>');
@ -259,12 +279,9 @@ $form->addElement('html', '</div></div>');
// CHAT SETTINGS
//$form->addElement('html', '<div class="sectiontitle" style="margin-top: 40px;"><a href="#header" style="float:right;">'.Display::return_icon('top.gif', get_lang('Top')).'</a><a name="chatsettings" id="chatsettings"></a>'.Display::return_icon('chat.png', get_lang('ConfigChat'),'','22').' '.get_lang('ConfigChat').'</div>');
$form->addElement('html', '<div> <h3>'.Display::return_icon('chat.png', get_lang('ConfigChat'),'','22').' '.get_lang('ConfigChat').'</h3><div>');
$form->addElement('radio', 'allow_open_chat_window', get_lang('AllowOpenchatWindow'), get_lang('AllowOpenChatWindowActivate'), 1);
$form->addElement('radio', 'allow_open_chat_window', null, get_lang('AllowOpenChatWindowDeactivate'), 0);
$form->addElement('style_submit_button', null, get_lang('SaveSettings'), 'class="save"');
$form->addElement('html', '</div></div>');
@ -364,11 +381,15 @@ $values['enable_lp_auto_launch'] = api_get_course_setting('en
$values['pdf_export_watermark_text'] = api_get_course_setting('pdf_export_watermark_text');
$values['course_grading_model'] = api_get_course_setting('course_grading_model');
$form->setDefaults($values);
// Validate form
if ($form->validate() && is_settings_editable()) {
$update_values = $form->exportValues();
/*
// update course picture
$picture = $_FILES['picture'];
@ -384,7 +405,8 @@ if ($form->validate() && is_settings_editable()) {
}
//Variables that will be saved in the TABLE_MAIN_COURSE table
$update_in_course_table = array('title','visual_code', 'course_language','category_code','department_name', 'department_url','visibility', 'subscribe', 'unsubscribe','tutor_name','course_registration_password');
$update_in_course_table = array('title','visual_code', 'course_language','category_code','department_name', 'department_url','visibility',
'subscribe', 'unsubscribe','tutor_name','course_registration_password');
foreach ($update_values as $index =>$value) {
$update_values[$index] = Database::escape_string($value);
@ -412,10 +434,10 @@ if ($form->validate() && is_settings_editable()) {
foreach($update_values as $key =>$value) {
//We do not update variables that were already saved in the TABLE_MAIN_COURSE table
if (!in_array($key, $update_in_course_table)) {
Database::update($table_course_setting, array('value' => $update_values[$key]), array('variable = ? ' =>$key));
if (!in_array($key, $update_in_course_table)) {
Database::update($table_course_setting, array('value' => $update_values[$key]), array('variable = ? AND c_id = ?' => array($key, api_get_course_int_id()), true));
}
}
}
$cidReset = true;
$cidReq = $course_code;
require '../inc/local.inc.php';
@ -436,20 +458,6 @@ if (isset($_GET['action']) && $_GET['action'] == 'show_message') {
Display :: display_normal_message(get_lang('ModifDone'));
}
// actions bar
/*
echo '<div class="actions">';
echo '<a href="#coursesettings">'.Display::return_icon('settings.png', get_lang('CourseSettings'),'','32').'</a>';
echo '<a href="#coursesaccess">'.Display::return_icon('course.png', get_lang('CourseAccess'),'','32').'</a>';
echo '<a href="#emailnotifications">'.Display::return_icon('mail.png', get_lang('EmailNotifications'),'','32').'</a>';
echo '<a href="#userrights">'.Display::return_icon('user.png', get_lang('UserRights'),'','32').'</a>';
echo '<a href="#chatsettings">'.Display::return_icon('chat.png', get_lang('ConfigChat'),'','32').'</a>';
if (api_get_setting('allow_course_theme') == 'true') {
echo '<a href="#learnpath">'.Display::return_icon('scorms.png', get_lang('ConfigLearnpath'),'','32').'</a>';
}
echo '<a href="#thematicadvance">'.Display::return_icon('course_progress.png', get_lang('ThematicAdvanceConfiguration'),'','32').'</a>';
echo '</div>';
*/
echo '<script>
$(function() {
$("#course_settings").accordion({

@ -20,18 +20,24 @@ require_once 'lib/gradebook_functions.inc.php';
require_once 'lib/fe/catform.class.php';
api_block_anonymous_users();
block_students();
$get_select_cat=Security::remove_XSS($_GET['selectcat']);
$get_select_cat = intval($_GET['selectcat']);
$catadd = new Category();
$my_user_id = api_get_user_id();
$catadd->set_user_id($my_user_id);
$catadd->set_parent_id(Database::escape_string($get_select_cat));
$catadd->set_parent_id($get_select_cat);
$catcourse = Category :: load ($get_select_cat);
if ($_in_course) {
$catadd->set_course_code($course_code);
} else {
$catadd->set_course_code($catcourse[0]->get_course_code());
}
$catadd->set_course_code(api_get_course_id());
$form = new CatForm(CatForm :: TYPE_ADD, $catadd, 'add_cat_form', null, api_get_self() . '?selectcat='.$get_select_cat);
if ($form->validate()) {
$values = $form->exportValues();
$select_course=isset($values['select_course']) ? $values['select_course'] : array();
@ -48,6 +54,9 @@ if ($form->validate()) {
$cat->set_name($values['name']);
$cat->set_course_code($values['course_code']);//?
}
//Always add the gradebook to the course
$cat->set_course_code(api_get_course_id());
$cat->set_description($values['description']);
$cat->set_user_id($values['hid_user_id']);
$cat->set_parent_id($values['hid_parent_id']);
@ -66,6 +75,7 @@ if ($form->validate()) {
if ( !$_in_course ) {
$interbreadcrumb[] = array ('url' => Security::remove_XSS($_SESSION['gradebook_dest']).'?selectcat='.$get_select_cat,'name' => get_lang('Gradebook'));
}
$interbreadcrumb[]= array ( 'url' =>'index.php','name' => get_lang('ToolGradebook'));
Display :: display_header(get_lang('NewCategory'));
$form->display();
Display :: display_footer();

@ -33,9 +33,14 @@ if ($form->validate()) {
$eval->set_name($values['name']);
$eval->set_description($values['description']);
$eval->set_user_id($values['hid_user_id']);
if (!empty ($values['hid_course_code'])) {
$eval->set_course_code($values['hid_course_code']);
}
//Always add the gradebook to the course
$eval->set_course_code(api_get_course_id());
$eval->set_category_id($values['hid_category_id']);
$eval->set_weight($values['weight']);

@ -18,22 +18,15 @@ require_once '../forum/forumfunction.inc.php';
api_block_anonymous_users();
block_students();
$course_info =isset($_GET['course_code'])? api_get_course_info($_GET['course_code']) : api_get_course_info();
$my_db_course=isset($_GET['course_code'])?$course_info['dbName']:'';
$course_info = api_get_course_info($_GET['course_code']);
$tbl_forum_thread = Database :: get_course_table(TABLE_FORUM_THREAD,$my_db_course);
$tbl_forum_thread = Database :: get_course_table(TABLE_FORUM_THREAD);
$tbl_link=Database::get_main_table(TABLE_MAIN_GRADEBOOK_LINK);
$all_categories = Category :: load();
$category = Category :: load($_GET['selectcat']);
$typeform = new LinkForm(LinkForm :: TYPE_CREATE,
$category[0],
null,
'create_link',
null,
api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat'])
. '&newtypeselected=' . (isset($_GET['typeselected']) ? Security::remove_XSS($_GET['typeselected']) : '')
. '&course_code=' . (empty($_GET['course_code'])?'':Security::remove_XSS($_GET['course_code'])),
$_GET['typeselected'])
;
$url = api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat']). '&newtypeselected=' . (isset($_GET['typeselected']) ? Security::remove_XSS($_GET['typeselected']) : ''). '&course_code=' . (empty($_GET['course_code'])?'':Security::remove_XSS($_GET['course_code']));
$typeform = new LinkForm(LinkForm :: TYPE_CREATE, $category[0], null, 'create_link', null, $url , $_GET['typeselected']);
// if user selected a link type
if ($typeform->validate() && isset($_GET['newtypeselected'])) {
@ -46,23 +39,21 @@ if ($typeform->validate() && isset($_GET['newtypeselected'])) {
// link type selected, show 2nd form to retrieve the link data
if (isset($_GET['typeselected']) && $_GET['typeselected'] != '0') {
$addform = new LinkAddEditForm(LinkAddEditForm :: TYPE_ADD,
$category[0],
intval($_GET['typeselected']),
null,
'add_link',
api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat'])
. '&typeselected=' . Security::remove_XSS($_GET['typeselected']) . '&course_code=' . Security::remove_XSS($_GET['course_code']));
$url = api_get_self() . '?selectcat=' . Security::remove_XSS($_GET['selectcat']).'&typeselected=' . Security::remove_XSS($_GET['typeselected']) . '&course_code=' . Security::remove_XSS($_GET['course_code']);
$addform = new LinkAddEditForm(LinkAddEditForm :: TYPE_ADD, $all_categories, intval($_GET['typeselected']),null, 'add_link', $url);
if ($addform->validate()) {
$addvalues = $addform->exportValues();
$link= LinkFactory :: create($_GET['typeselected']);
$link->set_user_id(api_get_user_id());
if($category[0]->get_course_code() == '' && !empty($_GET['course_code'])) {
/*
if ($category[0]->get_course_code() == '' && !empty($_GET['course_code'])) {
$link->set_course_code($_GET['course_code']);
} else {
$link->set_course_code($category[0]->get_course_code());
}
$link->set_category_id($category[0]->get_id());
}*/
$link->set_course_code(api_get_course_id());
$link->set_category_id($addvalues['select_gradebook']);
if ($link->needs_name_and_description()) {
$link->set_name($addvalues['name']);
@ -81,27 +72,25 @@ if (isset($_GET['typeselected']) && $_GET['typeselected'] != '0') {
$link->set_visible(empty ($addvalues['visible']) ? 0 : 1);
//update view_properties
if ( isset($_GET['typeselected']) && 5==$_GET['typeselected'] && (isset($addvalues['select_link']) && $addvalues['select_link']<>"")) {
if (isset($_GET['typeselected']) && 5 == $_GET['typeselected'] && (isset($addvalues['select_link']) && $addvalues['select_link']<>"")) {
$sql1 = 'SELECT thread_title from '.$tbl_forum_thread.'
WHERE c_id = '.$course_info['real_id'].' AND thread_id='.$addvalues['select_link'];
$res1=Database::query($sql1);
$rowtit=Database::fetch_row($res1);
$course_id=api_get_course_id();
$res1 = Database::query($sql1);
$rowtit = Database::fetch_row($res1);
$course_id = api_get_course_id();
$sql_l='SELECT count(*) FROM '.$tbl_link.' WHERE c_id = '.$course_info['real_id'].' AND ref_id='.$addvalues['select_link'].' and course_code="'.$course_id.'" and type=5;';
$res_l=Database::query($sql_l);
$row=Database::fetch_row($res_l);
if ( $row[0]==0 ) {
$link->add();
$sql = 'UPDATE '.$tbl_forum_thread.' SET thread_qualify_max='.$addvalues['weight'].',thread_weight='.$addvalues['weight'].',thread_title_qualify="'.$rowtit[0].'"
WHERE thread_id='.$addvalues['select_link'].' AND c_id = '.$course_info['real_id'].' ';
Database::query($sql);
//$sql_l='UPDATE '.$tbl_link.' SET weight='.$addvalues['weight'].' WHERE ref_id='.$addvalues['select_link'].' AND type=5;';
//Database::query($sql_l);
}
}
$link->add();
$addvalue_result=!empty($addvalues['addresult'])?$addvalues['addresult']:array();
if ($addvalue_result == 1) {
header('Location: gradebook_add_result.php?selecteval=' . $link->get_ref_id());

@ -27,14 +27,9 @@ $link = $linkarray[0];
$linkcat = isset($_GET['selectcat']) ? Security::remove_XSS($_GET['selectcat']):'';
$linkedit = isset($_GET['editlink']) ? Security::remove_XSS($_GET['editlink']):'';
$form = new LinkAddEditForm(LinkAddEditForm :: TYPE_EDIT,
null,
null,
$link,
'edit_link_form',
api_get_self() . '?selectcat=' . $linkcat
. '&editlink=' . $linkedit);
$cats = Category :: load(null, null, $course_code, null, null, $session_id, false); //already init
$form = new LinkAddEditForm(LinkAddEditForm :: TYPE_EDIT, $cats, null, $link, 'edit_link_form', api_get_self() . '?selectcat=' . $linkcat. '&editlink=' . $linkedit);
if ($form->validate()) {
$values = $form->exportValues();
$link->set_weight($values['weight']);

@ -10,7 +10,12 @@ $language_file= 'gradebook';
$cidReset= false;
$_in_course = true;
require_once '../inc/global.inc.php';
$course_code = api_get_course_id();
$course_code = api_get_course_id();
$stud_id = api_get_user_id();
$session_id = api_get_session_id();
//make sure the destination for scripts is index.php instead of gradebook.php
$_SESSION['gradebook_dest'] = 'index.php';
@ -52,15 +57,14 @@ function confirmation() {
$tbl_forum_thread = Database :: get_course_table(TABLE_FORUM_THREAD);
$tbl_attendance = Database :: get_course_table(TABLE_ATTENDANCE);
$tbl_grade_links = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_LINK);
$status = CourseManager::get_user_in_course_status(api_get_user_id(), api_get_course_id());
$status = CourseManager::get_user_in_course_status($stud_id, $course_code);
$filter_confirm_msg = true;
$filter_warning_msg = true;
$session_id = api_get_session_id();
///direct access to one evaluation
$cats = Category :: load(null, null, $course_code, null, null, $session_id, false); //already init
if (empty($cats))
{
if (empty($cats)) {
$cats = Category :: load(0, null, $course_code, null, null, $session_id, false);//first time
$first_time=1;
}
@ -78,10 +82,8 @@ if ( (isset($_GET['selectcat']) && $_GET['selectcat']>0) && (isset($_SESSION['st
//Introduction tool: student view
Display::display_introduction_section(TOOL_GRADEBOOK, array('ToolbarSet' => 'AssessmentsIntroduction'));
$category= $_GET['selectcat'];
$stud_id=api_get_user_id();
$course_code=api_get_course_id();
$session_id=api_get_session_id();
$category= $_GET['selectcat'];
$cats = Category :: load ($category, null, null, null, null, null, false);
$allcat= $cats[0]->get_subcategories($stud_id, $course_code, $session_id);
$alleval= $cats[0]->get_evaluations($stud_id);
@ -98,10 +100,6 @@ if ( (isset($_GET['selectcat']) && $_GET['selectcat']>0) && (isset($_SESSION['st
//Introduction tool: student view
Display::display_introduction_section(TOOL_GRADEBOOK, array('ToolbarSet' => 'AssessmentsIntroduction'));
$stud_id=api_get_user_id();
$course_code=api_get_course_id();
$session_id=api_get_session_id();
$addparams=array();
$cats = Category :: load (0, null, null, null, null, null, false);
$allcat= $cats[0]->get_subcategories($stud_id, $course_code, $session_id);
@ -119,7 +117,7 @@ if ( (isset($_GET['selectcat']) && $_GET['selectcat']>0) && (isset($_SESSION['st
//this is called when there is no data for the course admin
if (isset ($_GET['createallcategories'])) {
block_students();
$coursecat= Category :: get_not_created_course_categories(api_get_user_id());
$coursecat= Category :: get_not_created_course_categories($stud_id);
if (!count($coursecat) == 0) {
foreach ($coursecat as $row) {
@ -127,7 +125,7 @@ if (isset ($_GET['createallcategories'])) {
$cat->set_name($row[1]);
$cat->set_course_code($row[0]);
$cat->set_description(null);
$cat->set_user_id(api_get_user_id());
$cat->set_user_id($stud_id);
$cat->set_parent_id(0);
$cat->set_weight(0);
$cat->set_visible(0);
@ -355,9 +353,7 @@ if (!empty($course_to_crsind) && !isset($_GET['confirm'])) {
if (!isset($_GET['movecat']) && !isset($_GET['moveeval'])) {
die ('Error: movecat or moveeval not defined');
}
$button = '<form name="confirm"
method="post"
action="'.api_get_self() .'?confirm='
$button = '<form name="confirm" method="post" action="'.api_get_self() .'?confirm='
.(isset($_GET['movecat']) ? '&movecat=' . Security::remove_XSS($_GET['movecat'])
: '&moveeval=' . Security::remove_XSS($_GET['moveeval']) )
.'&selectcat=' . Security::remove_XSS($_GET['selectcat'])
@ -577,7 +573,7 @@ else
if (isset ($_GET['studentoverview'])) {
//@todo this code also seems to be deprecated ...
$cats= Category :: load($category);
$stud_id= (api_is_allowed_to_create_course() ? null : api_get_user_id());
$stud_id= (api_is_allowed_to_create_course() ? null : $stud_id);
$allcat= array ();
$alleval= $cats[0]->get_evaluations($stud_id, true);
$alllink= $cats[0]->get_links($stud_id, true);
@ -610,10 +606,8 @@ if (isset ($_GET['studentoverview'])) {
// we have to show the root category and show its subcategories that
// are inside this course. This is done at the time of calling
// $cats[0]->get_subcategories(), not at the time of doing Category::load()
// $category comes from GET['selectcat']
$course_code = api_get_course_id();
$session_id = api_get_session_id();
// $category comes from GET['selectcat']
//if $category = 0 (which happens when GET['selectcat'] is undefined)
// then Category::load() will create a new 'root' category with empty
// course and session fields in memory (Category::create_root_category())
@ -631,12 +625,9 @@ if (isset ($_GET['studentoverview'])) {
$cats = Category :: load(null, null, $course_code, null, null, $session_id, false);
if (empty($cats)) {
// There is no category for this course+session, so create one
$cat= new Category();
$course_code = api_get_course_id();
$session_id = api_get_session_id();
if (!empty($session_id)) {
$my_session_id=api_get_session_id();
$s_name = api_get_session_name($my_session_id);
$cat= new Category();
if (!empty($session_id)) {
$s_name = api_get_session_name($session_id);
$cat->set_name($course_code.' - '.get_lang('Session').' '.$s_name);
$cat->set_session_id($session_id);
} else {
@ -644,7 +635,7 @@ if (isset ($_GET['studentoverview'])) {
}
$cat->set_course_code($course_code);
$cat->set_description(null);
$cat->set_user_id(api_get_user_id());
$cat->set_user_id($stud_id);
$cat->set_parent_id(0);
$cat->set_weight(100);
$cat->set_visible(0);
@ -661,9 +652,9 @@ if (isset ($_GET['studentoverview'])) {
//with this fix the teacher only can view 1 gradebook
//$stud_id= (api_is_allowed_to_create_course() ? null : api_get_user_id());
if (api_is_platform_admin()) {
$stud_id= (api_is_allowed_to_create_course() ? null : api_get_user_id());
$stud_id = (api_is_allowed_to_create_course() ? null : api_get_user_id());
} else {
$stud_id= api_get_user_id();
$stud_id = $stud_id;
}
$allcat = $cats[0]->get_subcategories($stud_id, $course_code, $session_id);
$alleval = $cats[0]->get_evaluations($stud_id);
@ -684,7 +675,6 @@ if (isset($_GET['cidReq']) && $_GET['cidReq']!='') {
} else {
$addparams['cidReq']='';
}
$gradebooktable = new GradebookTable($cats[0], $allcat, $alleval,$alllink, $addparams);
$no_qualification = false;
if (( count($allcat) == 0) && ( count($alleval) == 0 ) && ( count($alllink) == 0 )) {
$no_qualification = true;
@ -705,7 +695,7 @@ if ($category != '0') {
if (!api_is_allowed_to_edit()) {
// generating the total score for a course
$stud_id = api_get_user_id();
$cats_course = Category :: load ($category_id, null, null, null, null, null, false);
$alleval_course = $cats_course[0]->get_evaluations($stud_id,true);
$alllink_course = $cats_course[0]->get_links($stud_id,true);
@ -754,7 +744,7 @@ if ($category != '0') {
}
} //end hack
DisplayGradebook::display_header_gradebook($cats[0], 0, $category_id, $is_course_admin, $is_platform_admin, $simple_search_form, false, true);
}
}
@ -769,14 +759,64 @@ if (api_is_allowed_to_edit(null, true)) {
if (((isset ($_GET['selectcat']) && $_GET['selectcat']==0) || ((isset($_GET['cidReq']) && $_GET['cidReq']!==''))) || isset($_GET['isStudentView']) && $_GET['isStudentView']=='false') {
$cats = Category :: load(null, null, $course_code, null, null, $session_id, false);
if (!$first_time=1) {
DisplayGradebook :: display_reduce_header_gradebook($cats[0],$is_course_admin, $is_platform_admin, $simple_search_form, false, false);
}
}
}
}
if ($first_time==1 && api_is_allowed_to_edit(null,true)) {
echo '<meta http-equiv="refresh" content="0;url='.api_get_self().'?cidReq='.$course_code.'" />';
} else {
$gradebooktable->display();
} else {
$cats = Category :: load(null, null, $course_code, null, null, $session_id, false); //already init
$models = api_get_settings_options('grading_model');
$course_grading_model_id = api_get_course_setting('course_grading_model');
$grading_model = '';
if (!empty($course_grading_model_id)) {
foreach($models as $option) {
if (intval($option['id']) == $course_grading_model_id) {
$grading_model = $option['value'];
}
}
}
$grading_contents = api_grading_model_functions($grading_model, 'to_array');
$grading_string = api_grading_model_functions($grading_model, 'decorate');
if (!empty($cats)) {
$items = $grading_contents['items'];
$i = 0;
foreach ($cats as $cat) {
$allcat = $cat->get_subcategories($stud_id, $course_code, $session_id);
$alleval = $cat->get_evaluations($stud_id);
$alllink = $cat->get_links($stud_id);
if ($cat->get_parent_id() != 0 ) {
/*echo Display::tag('h2', $cat->get_name().' ( '.$items[$i]['percentage'].') ');
DisplayGradebook::display_header_gradebook_per_gradebook($cat, 0, $cat->get_id(), $is_course_admin, $is_platform_admin, $simple_search_form, false, true);
$gradebooktable = new GradebookTable($cat, $allcat, $alleval,$alllink, $addparams);
$gradebooktable->display();*/
$i++;
} else {
//This is the father
//Create gradebook/add gradebook links
DisplayGradebook::display_header_gradebook($cat, 0, $cat->get_id(), $is_course_admin, $is_platform_admin, $simple_search_form, false, true);
if (api_is_allowed_to_edit(null,true)) {
//Showing the grading system
if (!empty($grading_string)) {
Display::display_normal_message($grading_string);
}
}
$gradebooktable = new GradebookTable($cat, $allcat, $alleval,$alllink, $addparams);
$gradebooktable->display();
//DisplayGradebook :: display_reduce_header_gradebook($cat,$is_course_admin, $is_platform_admin, $simple_search_form, false, false);
}
}
}
}
Display :: display_footer();

@ -159,17 +159,8 @@ class AttendanceLink extends AbstractLink
* Lazy load function to get the database table of the student publications
*/
private function get_attendance_table() {
$course_info = Database :: get_course_info($this->get_course_code());
$database_name = isset($course_info['db_name']) ? $course_info['db_name'] : '';
if ($database_name!='') {
if (!isset($this->attendance_table)) {
$this->attendance_table = Database :: get_course_table(TABLE_ATTENDANCE, $database_name);
}
return $this->attendance_table;
} else {
return '';
}
$this->attendance_table = Database :: get_course_table(TABLE_ATTENDANCE);
return $this->attendance_table;
}
/**

@ -97,7 +97,7 @@ class Category implements GradebookItem
}
public function set_parent_id ($parent) {
$this->parent = $parent;
$this->parent = intval($parent);
}
/**
* Filters to int and sets the session ID
@ -196,7 +196,7 @@ class Category implements GradebookItem
$sql .= ' visible = '.intval($visible);
$paramcount ++;
}
//echo $sql;
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
$allcat = Category::create_category_objects_from_sql_result($result);
@ -961,22 +961,21 @@ class Category implements GradebookItem
public function get_subcategories ($stud_id = null, $course_code = null, $session_id = null) {
$cats = array();
// 1 student
if (isset($stud_id)) {
if (isset($stud_id)) {
// special case: this is the root
if ($this->id == 0) {
return Category::get_root_categories_for_student ($stud_id, $course_code, $session_id);
} else {
return Category::load(null,null,$course_code,$this->id,
api_is_allowed_to_create_course() ? null : 1, $session_id );
} else {
return Category::load(null,null,$course_code,$this->id, api_is_allowed_to_create_course() ? null : 1, $session_id );
}
} else {// all students
// course admin
if (api_is_allowed_to_create_course() && !api_is_platform_admin()) {
// root
if ($this->id == 0) {
return $this->get_root_categories_for_teacher (api_get_user_id(), $course_code, $session_id, false);
return $this->get_root_categories_for_teacher(api_get_user_id(), $course_code, $session_id, false);
// inside a course
} elseif (!empty($this->course_code)) {
} elseif (!empty($this->course_code)) {
return Category::load(null, null, $this->course_code, $this->id, null, $session_id, false);
} elseif (!empty($course_code)) {
return Category::load(null, null, $course_code, $this->id, null, $session_id, false);
@ -1011,9 +1010,9 @@ class Category implements GradebookItem
// special case: this is the root
if ($this->id == 0) {
$evals = Evaluation::get_evaluations_with_result_for_student(0,$stud_id);
} else {
$evals = Evaluation::load(null,null,$course_code,$this->id,
api_is_allowed_to_create_course() ? null : 1);
} else {
$evals = Evaluation::load(null,null,$course_code,$this->id, api_is_allowed_to_create_course() ? null : 1);
}
} else {// all students
// course admin

@ -65,11 +65,7 @@ class DropboxLink extends EvalLink
* Lazy load function to get the dropbox database table
*/
private function get_dropbox_table () {
if (!isset($this->dropbox_table)) {
$course_info = Database :: get_course_info($this->get_course_code());
$database_name = $course_info['db_name'];
$this->dropbox_table = Database :: get_course_table(TABLE_DROPBOX_FILE, $database_name);
}
$this->dropbox_table = Database :: get_course_table(TABLE_DROPBOX_FILE);
return $this->dropbox_table;
}

@ -178,6 +178,7 @@ class Evaluation implements GradebookItem
$sql .= ' visible = '.intval($locked);
$paramcount ++;
}
//echo $sql;
$result = Database::query($sql);
$alleval = Evaluation::create_evaluation_objects_from_sql_result($result);
return $alleval;

@ -61,11 +61,10 @@ class ExerciseLink extends AbstractLink
if (empty($this->course_code)) {
die('Error in get_not_created_links() : course code not set');
}
$course_info = api_get_course_info($this->course_code);
$tbl_grade_links = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_LINK,$course_info['dbName']);
$sql = 'SELECT id,title from '.$this->get_exercise_table().' WHERE active=1 AND session_id='.api_get_session_id().'';
$course_info = api_get_course_info($this->course_code);
$sql = 'SELECT id,title from '.$this->get_exercise_table().'
WHERE c_id = '.$course_info['real_id'].' AND active=1 AND session_id='.api_get_session_id().'';
$result = Database::query($sql);
$cats=array();
while ($data=Database::fetch_array($result)) {
$cats[] = array ($data['id'], $data['title']);
@ -214,16 +213,8 @@ class ExerciseLink extends AbstractLink
* Lazy load function to get the database table of the exercise
*/
private function get_exercise_table () {
$course_info = Database :: get_course_info($this->get_course_code());
$database_name = isset($course_info['db_name']) ? $course_info['db_name'] : '';
if ($database_name!='') {
if (!isset($this->exercise_table)) {
$this->exercise_table = Database :: get_course_table(TABLE_QUIZ_TEST, $database_name);
}
return $this->exercise_table;
} else {
return '';
}
$this->exercise_table = Database :: get_course_table(TABLE_QUIZ_TEST);
return $this->exercise_table;
}
/**

@ -74,8 +74,8 @@ class ForumThreadLink extends AbstractLink
die('Error in get_not_created_links() : course code not set');
}
$course_info = api_get_course_info($this->course_code);
$tbl_grade_links = Database :: get_course_table(TABLE_FORUM_THREAD,$course_info['dbName']);
$tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY,$course_info['dbName']);
$tbl_grade_links = Database :: get_course_table(TABLE_FORUM_THREAD);
$tbl_item_property = Database :: get_course_table(TABLE_ITEM_PROPERTY);
$sql = 'SELECT tl.thread_id, tl.thread_title, tl.thread_title_qualify
FROM '.$tbl_grade_links.' tl ,'.$tbl_item_property.' ip

@ -60,15 +60,12 @@ class LearnpathLink extends AbstractLink
* Generate an array of all learnpaths available.
* @return array 2-dimensional array - every element contains 2 subelements (id, name)
*/
public function get_all_links()
{
public function get_all_links() {
if (empty($this->course_code))
die('Error in get_not_created_links() : course code not set');
$course_info = api_get_course_info($this->course_code);
$tbl_grade_links = Database :: get_main_table(TABLE_MAIN_GRADEBOOK_LINK,$course_info['dbName']);
$sql = 'SELECT id,name FROM '.$this->get_learnpath_table().' WHERE session_id = '.api_get_session_id().' ';
$sql = 'SELECT id,name FROM '.$this->get_learnpath_table().' WHERE session_id = '.api_get_session_id().' ';
$result = Database::query($sql);
$cats=array();
@ -231,15 +228,8 @@ class LearnpathLink extends AbstractLink
/**
* Lazy load function to get the database table of the learnpath
*/
private function get_learnpath_table ()
{
$course_info = api_get_course_info($this->get_course_code());
$database_name = isset($course_info['dbName']) ? $course_info['dbName'] : '';
if ($database_name=='') {
return '';
} elseif (!isset($this->learnpath_table)) {
$this->learnpath_table = Database :: get_course_table(TABLE_LP_MAIN, $database_name);
}
private function get_learnpath_table () {
$this->learnpath_table = Database :: get_course_table(TABLE_LP_MAIN);
return $this->learnpath_table;
}

@ -102,12 +102,12 @@ class StudentPublicationLink extends AbstractLink
die('Error in get_not_created_links() : course code not set');
}
$course_info = api_get_course_info($this->course_code);
$tbl_grade_links = Database :: get_course_table(TABLE_STUDENT_PUBLICATION, $course_info['dbName']);
$tbl_grade_links = Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
$sql = "SELECT id, url FROM $tbl_grade_links
WHERE c_id = {$course_info['real_id']} AND has_properties != '' AND filetype='folder' AND session_id = ".api_get_session_id()."";
$result = Database::query($sql);
while ($data=Database::fetch_array($result)) {
while ($data = Database::fetch_array($result)) {
$cats[] = array ($data['id'], basename($data['url']));
}
$cats=isset($cats) ? $cats : array();
@ -119,7 +119,7 @@ class StudentPublicationLink extends AbstractLink
*/
public function has_results() {
$course_info = api_get_course_info($this->course_code);
$tbl_grade_links = Database :: get_course_table(TABLE_STUDENT_PUBLICATION,$course_info['dbName']);
$tbl_grade_links = Database :: get_course_table(TABLE_STUDENT_PUBLICATION);
$sql = 'SELECT count(*) AS number FROM '.$tbl_grade_links."
WHERE c_id = {$course_info['real_id']} AND
parent_id = '".intval($this->get_ref_id())."' AND

@ -59,7 +59,8 @@ class SurveyLink extends AbstractLink
}
$tbl_survey = $this->get_survey_table();
$session_id = api_get_session_id();
$sql = 'SELECT survey_id, title, code FROM '.$tbl_survey.' WHERE session_id = '.intval($session_id).'';
$course_id = api_get_course_int_id();
$sql = 'SELECT survey_id, title, code FROM '.$tbl_survey.' WHERE c_id = '.$course_id.' AND session_id = '.intval($session_id).'';
$result = Database::query($sql);
while ($data = Database::fetch_array($result)) {
$links[] = array($data['survey_id'], api_trunc_str($data['code'].': '.self::html_to_text($data['title']), 80));
@ -187,16 +188,8 @@ class SurveyLink extends AbstractLink
* Lazy load function to get the database table of the surveys
*/
private function get_survey_table() {
$course_info = Database :: get_course_info($this->get_course_code());
$database_name = isset($course_info['db_name']) ? $course_info['db_name'] : '';
if ($database_name != '') {
if (!isset($this->survey_table)) {
$this->survey_table = Database :: get_course_table(TABLE_SURVEY, $database_name);
}
return $this->survey_table;
} else {
return '';
}
$this->survey_table = Database :: get_course_table(TABLE_SURVEY);
return $this->survey_table;
}
/**

@ -81,19 +81,23 @@ class CatForm extends FormValidator {
//check if we are a root category
//if so, you can only choose between courses
if ($this->category_object->get_parent_id() == '0') {
$select = $this->addElement('select','select_course',array(get_lang('PickACourse'),'test'), null);
//$select = $this->addElement('select','select_course',array(get_lang('PickACourse'),'test'), null);
$coursecat = Category :: get_not_created_course_categories(api_get_user_id());
if (count($coursecat)==0) {
$select->addoption(get_lang('CourseIndependent'),'COURSEINDEPENDENT','disabled');
//$select->addoption(get_lang('CourseIndependent'),'COURSEINDEPENDENT','disabled');
} else {
$select->addoption(get_lang('CourseIndependent'),'COURSEINDEPENDENT');
//$select->addoption(get_lang('CourseIndependent'),'COURSEINDEPENDENT');
}
//only return courses that are not yet created by the teacher
foreach($coursecat as $row) {
$select->addoption($row[1],$row[0]);
if (!empty($coursecat)) {
foreach($coursecat as $row) {
//$select->addoption($row[1],$row[0]);
}
} else {
//$select->addoption($row[1],$row[0]);
}
$this->setDefaults(array(
'select_course' => $this->category_object->get_course_code(),
'hid_user_id' => $this->category_object->get_user_id(),
'hid_parent_id' => $this->category_object->get_parent_id()
));
@ -127,15 +131,41 @@ class CatForm extends FormValidator {
private function build_basic_form() {
$this->addElement('hidden', 'zero', 0);
//$this->add_textfield('name', get_lang('CategoryName'),true,array('size'=>'54','maxlength'=>'50'));
$this->add_textfield('weight', get_lang('TotalWeight'),true,array('size'=>'4','maxlength'=>'5'));
$this->add_textfield('name', get_lang('CategoryName'),true,array('size'=>'54','maxlength'=>'50'));
$models = api_get_settings_options('grading_model');
$course_grading_model_id = api_get_course_setting('course_grading_model');
$grading_model = '';
if (!empty($course_grading_model_id)) {
foreach($models as $option) {
if (intval($option['id']) == $course_grading_model_id) {
$grading_model = $option['value'];
}
}
}
$grading_contents = api_grading_model_functions($grading_model, 'to_array');
if (!empty($grading_contents)) {
$course_code = api_get_course_id();
$session_id = api_get_session_id();
///direct access to one evaluation
$cats = Category :: load(null, null, $course_code, null, null, $session_id, false); //already init
$count = count($cats) - 1;
$value = intval($grading_contents['items'][$count]['percentage']);
$this->add_textfield('weight', get_lang('TotalWeight'),true,array('value'=>$value,'size'=>'4','maxlength'=>'5'));
$this->freeze('weight');
}
$this->addElement('static', null, null, '<i>'.get_lang('TotalSumOfWeights').'</i>');
$this->add_textfield('certif_min_score', get_lang('CertificateMinScore'),false,array('size'=>'4','maxlength'=>'5'));
$this->addElement('hidden','hid_user_id');
$this->addElement('hidden','hid_parent_id');
$this->addElement('textarea', 'description', get_lang('Description'),array('rows'=>'3','cols' => '34'));
// $this->addElement('checkbox', 'visible',get_lang('Visible'));
$this->addElement('checkbox', 'visible',get_lang('Visible'));
$this->addElement('style_submit_button', null, get_lang('EditCategory'), 'class="save"');
$this->addRule('weight',get_lang('OnlyNumbers'),'numeric');
$this->addRule('weight',get_lang('NoDecimals'),'nopunctuation');

@ -194,6 +194,191 @@ class DisplayGradebook
echo $header;
}
function display_header_gradebook_per_gradebook($catobj, $showtree, $selectcat, $is_course_admin, $is_platform_admin, $simple_search_form, $show_add_qualification = true, $show_add_link = true) {
//student
$status = CourseManager::get_user_in_course_status(api_get_user_id(), api_get_course_id());
$objcat = new Category();
$course_id = Database::get_course_by_category($selectcat);
$message_resource=$objcat->show_message_resource_delete($course_id);
if (!$is_course_admin && $status<>1 && $selectcat<>0) {
$user_id = api_get_user_id();
$user= get_user_info_from_id($user_id);
$catcourse= Category :: load($catobj->get_id());
$scoredisplay = ScoreDisplay :: instance();
$scorecourse = $catcourse[0]->calc_score($user_id);
// generating the total score for a course
$allevals= $catcourse[0]->get_evaluations($user_id,true);
$alllinks= $catcourse[0]->get_links($user_id,true);
$evals_links = array_merge($allevals, $alllinks);
$item_value=0;
$item_total=0;
for ($count=0; $count < count($evals_links); $count++) {
$item = $evals_links[$count];
$score = $item->calc_score($user_id);
$my_score_denom=($score[1]==0) ? 1 : $score[1];
$item_value+=$score[0]/$my_score_denom*$item->get_weight();
$item_total+=$item->get_weight();
//$row[] = $scoredisplay->display_score($score,SCORE_DIV_PERCENT);
}
$item_value = number_format($item_value, 2, '.', ' ');
$total_score=array($item_value,$item_total);
$scorecourse_display = $scoredisplay->display_score($total_score, SCORE_DIV_PERCENT);
$cattotal = Category :: load(0);
$scoretotal= $cattotal[0]->calc_score(api_get_user_id());
$scoretotal_display = (isset($scoretotal) ? $scoredisplay->display_score($scoretotal, SCORE_PERCENT) : get_lang('NoResultsAvailable'));
$scoreinfo = get_lang('StatsStudent') . ' :<b> '.api_get_person_name($user['firstname'], $user['lastname']).'</b><br />';
if ((!$catobj->get_id() == '0') && (!isset ($_GET['studentoverview'])) && (!isset ($_GET['search']))) {
$scoreinfo.= '<h2>'.get_lang('Total') . ' : ' . $scorecourse_display . '</h2>';
}
Display :: display_normal_message($scoreinfo, false);
}
// show navigation tree and buttons?
$header = '<div class="actions"><table border=0>';
if (($showtree == '1') || (isset ($_GET['studentoverview']))) {
$header .= '<tr>';
if (!$selectcat == '0') {
$header .= '<td style=" "><a href="' . api_get_self() . '?selectcat=' . $catobj->get_parent_id() . '">'.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('RootCat'),'','32').'</a></td>';
}
$header .= '<td style=" ">' . get_lang('CurrentCategory') . '</td>' .
'<td style=" "><form name="selector"><select name="selectcat" onchange="document.selector.submit()">';
$cats= Category :: load();
$tree= $cats[0]->get_tree();
unset ($cats);
foreach ($tree as $cat) {
for ($i= 0; $i < $cat[2]; $i++) {
$line .= '&mdash;';
}
$line=isset($line) ? $line : '';
if (isset($_GET['selectcat']) && $_GET['selectcat'] == $cat[0]) {
$header .= '<option selected value=' . $cat[0] . '>' . $line . ' ' . $cat[1] . '</option>';
} else {
$header .= '<option value=' . $cat[0] . '>' . $line . ' ' . $cat[1] . '</option>';
}
$line= '';
}
$header .= '</select></form></td>';
if (!empty($simple_search_form) && $message_resource===false) {
$header .= '<td style="vertical-align: top;">'.$simple_search_form->toHtml().'</td>';
} else {
$header .= '<td></td>';
}
if ($is_course_admin && $message_resource===false && $_GET['selectcat']!=0) {
/*$header .= '<td style="vertical-align: top;"><a href="gradebook_flatview.php?'.api_get_cidreq().'&selectcat=' . $catobj->get_id() . '"><img src="../img/view_list.gif" alt="' . get_lang('FlatView') . '" /> ' . get_lang('FlatView') . '</a>';
if ($is_course_admin && $message_resource===false) {
$header .= '<td style="vertical-align: top;"><a href="gradebook_scoring_system.php?'.api_get_cidreq().'&selectcat=' . $catobj->get_id() .'"><img src="../img/acces_tool.gif" alt="' . get_lang('ScoreEdit') . '" /> ' . get_lang('ScoreEdit') . '</a>';
}*/
} elseif (!(isset ($_GET['studentoverview']))) {
if ( $message_resource===false ) {
//$header .= '<td style="vertical-align: top;"><a href="'.api_get_self().'?'.api_get_cidreq().'&studentoverview=&selectcat=' . $catobj->get_id() . '"><img src="../img/view_list.gif" alt="' . get_lang('FlatView') . '" /> ' . get_lang('FlatView') . '</a>';
}
} else {
$header .= '<td style="vertical-align: top;"><a href="'.api_get_self().'?'.api_get_cidreq().'&studentoverview=&exportpdf=&selectcat=' . $catobj->get_id() . '" target="_blank"><img src="../img/icons/32/.png" alt="' . get_lang('ExportPDF') . '" /> ' . get_lang('ExportPDF') . '</a>';
}
$header .= '</td></tr>';
}
$header.='</table></div>';
// for course admin & platform admin add item buttons are added to the header
$header .= '<div class="actions">';
$my_category = $catobj->shows_all_information_an_category($catobj->get_id());
$user_id = api_get_user_id();
$course_code = $my_category['course_code'];
$status_user = api_get_status_of_user_in_course ($user_id,$course_code);
//$header .= '<a href="gradebook_add_cat.php?'.api_get_cidreq().'&selectcat=0"><img src="../img/folder_new.gif" alt="' . get_lang('AddGradebook') . '" /></a></td>';
if (api_is_allowed_to_edit(null, true)) {
if ($selectcat == '0') {
if ($show_add_qualification === true) {
}
if ($show_add_link) {
//$header .= '<td><a href="gradebook_add_eval.php?'.api_get_cidreq().'"><img src="../img/filenew.gif" alt="' . get_lang('NewEvaluation') . '" /> ' . get_lang('NewEvaluation') . '</a>';
}
} else {
if ($show_add_qualification === true && $message_resource===false) {
//$header .= '<a href="gradebook_add_cat.php?'.api_get_cidreq().'&selectcat=' . $catobj->get_id() . '" ><img src="../img/folder_new.gif" alt="' . get_lang('NewSubCategory') . '" align="absmiddle" /> ' . get_lang('NewSubCategory') . '</a></td>';
}
$my_category=$catobj->shows_all_information_an_category($catobj->get_id());
$my_api_cidreq = api_get_cidreq();
if ($my_api_cidreq=='') {
$my_api_cidreq='cidReq='.$my_category['course_code'];
}
if ($show_add_link && !$message_resource) {
//$header .= '<td><a href="gradebook_add_eval.php?'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() . '" >'.Display::return_icon('new_evaluation.png', get_lang('NewEvaluation'),'','32').'</a>';
$cats= Category :: load($selectcat);
if ($cats[0]->get_course_code() != null && !$message_resource) {
//$header .= '<td><a href="gradebook_add_link.php?'.api_get_cidreq().'&selectcat=' . $catobj->get_id() . '"><img src="../img/link.gif" alt="' . get_lang('MakeLink') . '" align="absmiddle" /> ' . get_lang('MakeLink') . '</a>';
//$header .= '<td><a href="gradebook_add_link.php?'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() . '">'.Display::return_icon('new_online_evaluation.png', get_lang('MakeLink'),'','32').'</a>';
} else {
// $header .= '<td><a href="gradebook_add_link_select_course.php?'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() . '">'.Display::return_icon('new_online_evaluation.png', get_lang('MakeLink'),'','32').'</a>';
}
}
if (!$message_resource) {
$myname = $catobj->shows_all_information_an_category($catobj->get_id());
$my_course_id=api_get_course_id();
$my_file= substr($_SESSION['gradebook_dest'],0,5);
$header .= '<td style="vertical-align: top;"><a href="gradebook_flatview.php?'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() . '">'.Display::return_icon('stats.png', get_lang('FlatView'),'','32').'</a>';
$header .= '<td style="vertical-align: top;"><a href="gradebook_display_certificate.php?'.$my_api_cidreq.'&amp;cat_id='.(int)$_GET['selectcat'].'">'.Display::return_icon('certificate_list.png', get_lang('GradebookSeeListOfStudentsCertificates'),'','32').'</a>';
$visibility_icon = ($catobj->is_visible() == 0) ? 'invisible' : 'visible';
$visibility_command = ($catobj->is_visible() == 0) ? 'set_visible' : 'set_invisible';
//Right icons
$modify_icons = '<a href="gradebook_edit_cat.php?editcat='.$catobj->get_id().'&cidReq='.$catobj->get_course_code().'">'.Display::return_icon('edit.png', get_lang('Edit'),'','32').'</a>';
//$modify_icons .= '<a href="../document/document.php?curdirpath=/certificates&'.$my_api_cidreq.'&origin=gradebook&selectcat=' . $catobj->get_id() . '">'.
Display::return_icon('certificate.png', get_lang('AttachCertificate'),'','32').'</a>';
//$modify_icons .= '<a href="gradebook_edit_all.php?id_session='.intval($_SESSION['id_session']).'&amp;'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() . '">'.Display::return_icon('percentage.png', get_lang('EditAllWeights'),'','32').'</a>';
//$modify_icons .= '<a href="gradebook_scoring_system.php?'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() .'">'.Display::return_icon('ranking.png', get_lang('ScoreEdit'),'','32').'</a>';
//hide or delete are not options available
//$modify_icons .= '&nbsp;<a href="' . api_get_self() . '?visiblecat=' . $catobj->get_id() . '&amp;' . $visibility_command . '=&amp;selectcat=0 ">'.Display::return_icon($visibility_icon.'.png', get_lang('Visible'),'','32').'</a>';
if ($catobj->get_name() != api_get_course_id()) {
$modify_icons .= '&nbsp;<a href="' . api_get_self() . '?deletecat=' . $catobj->get_id() . '&amp;selectcat=0&amp;cidReq='.$catobj->get_course_code().'" onclick="return confirmation();">'.Display::return_icon('delete.png', get_lang('DeleteAll'),'','32').'</a>';
}
$header .= Display::div($modify_icons, array('class'=>'right'));
}
}
} elseif (isset ($_GET['search'])) {
$header .= '<b>'.get_lang('SearchResults').' :</b>';
}
$header .= '</div>';
echo $header;
/*
if (api_is_allowed_to_edit(null, true)) {
$weight = ((intval($catobj->get_weight())>0) ? $catobj->get_weight() : 0);
$weight = Display::tag('h3', get_lang('TotalWeight').' : '.$weight);
$min_certification = (intval($catobj->get_certificate_min_score()>0) ? $catobj->get_certificate_min_score() : 0);
$min_certification = Display::tag('h3', get_lang('CertificateMinScore').' : '.$min_certification);
//@todo show description
$description = (($catobj->get_description() == "" || is_null($catobj->get_description())) ? '' : '<strong>'.get_lang('GradebookDescriptionLog').'</strong>'.': '.$catobj->get_description());
Display::display_normal_message($weight.$min_certification, false);
if (!empty($description)) {
echo Display::div($description, array());
}
}*/
}
/**
* Displays the header for the gradebook containing the navigation tree and links
* @param category_object $currentcat
@ -208,7 +393,6 @@ class DisplayGradebook
//student
$status = CourseManager::get_user_in_course_status(api_get_user_id(), api_get_course_id());
$objcat = new Category();
//$objdat=new Database();
$course_id = Database::get_course_by_category($selectcat);
$message_resource=$objcat->show_message_resource_delete($course_id);
@ -216,7 +400,7 @@ class DisplayGradebook
$user_id = api_get_user_id();
$user= get_user_info_from_id($user_id);
$catcourse= Category :: load($catobj->get_id());
$catcourse= Category::load($catobj->get_id());
$scoredisplay = ScoreDisplay :: instance();
$scorecourse = $catcourse[0]->calc_score($user_id);
@ -234,30 +418,39 @@ class DisplayGradebook
$item_total+=$item->get_weight();
//$row[] = $scoredisplay->display_score($score,SCORE_DIV_PERCENT);
}
$children = $catcourse[0]->get_subcategories(api_get_user_id(), api_get_course_id(), api_get_session_id());
$count = 1;
if (!empty($children)) {
$count = count($children);
}
$item_value = $item_value/$count;
$item_total = $item_total / $count;
$item_value = number_format($item_value, 2, '.', ' ');
$total_score=array($item_value,$item_total);
$total_score = array($item_value, $item_total);
$scorecourse_display = $scoredisplay->display_score($total_score, SCORE_DIV_PERCENT);
$cattotal = Category :: load(0);
$scoretotal= $cattotal[0]->calc_score(api_get_user_id());
$scoretotal_display = (isset($scoretotal) ? $scoredisplay->display_score($scoretotal, SCORE_PERCENT) : get_lang('NoResultsAvailable'));
$scoreinfo = get_lang('StatsStudent') . ' :<b> '.api_get_person_name($user['firstname'], $user['lastname']).'</b><br />';
//$scoreinfo = get_lang('StatsStudent') . ' :<b> '.api_get_person_name($user['firstname'], $user['lastname']).'</b><br />';
if ((!$catobj->get_id() == '0') && (!isset ($_GET['studentoverview'])) && (!isset ($_GET['search']))) {
$scoreinfo.= '<h2>'.get_lang('Total') . ' : ' . $scorecourse_display . '</h2>';
}
//$scoreinfo.= '<br />'.get_lang('Total') . ' : <b>' . $scoretotal_display . '</b>';
Display :: display_normal_message($scoreinfo, false);
}
// show navigation tree and buttons?
$header = '<div class="actions"><table border=0>';
if (($showtree == '1') || (isset ($_GET['studentoverview']))) {
$header .= '<tr>';
if (!$selectcat == '0') {
$header .= '<td style=" "><a href="' . api_get_self() . '?selectcat=' . $catobj->get_parent_id() . '">'.Display::return_icon('back.png',get_lang('BackTo').' '.get_lang('RootCat'),'','32').'</a></td>';
}
$header .= '<td style=" ">' . get_lang('CurrentCategory') . '</td>' .
'<td style=" "><form name="selector"><select name="selectcat" onchange="document.selector.submit()">';
$header .= '<td>' . get_lang('CurrentCategory') . '</td>' .
'<td><form name="selector"><select name="selectcat" onchange="document.selector.submit()">';
$cats= Category :: load();
$tree= $cats[0]->get_tree();
@ -291,7 +484,8 @@ class DisplayGradebook
//$header .= '<td style="vertical-align: top;"><a href="'.api_get_self().'?'.api_get_cidreq().'&studentoverview=&selectcat=' . $catobj->get_id() . '"><img src="../img/view_list.gif" alt="' . get_lang('FlatView') . '" /> ' . get_lang('FlatView') . '</a>';
}
} else {
$header .= '<td style="vertical-align: top;"><a href="'.api_get_self().'?'.api_get_cidreq().'&studentoverview=&exportpdf=&selectcat=' . $catobj->get_id() . '" target="_blank"><img src="../img/icons/32/.png" alt="' . get_lang('ExportPDF') . '" /> ' . get_lang('ExportPDF') . '</a>';
$header .= '<td style="vertical-align: top;"><a href="'.api_get_self().'?'.api_get_cidreq().'&studentoverview=&exportpdf=&selectcat=' . $catobj->get_id() . '" target="_blank">
<img src="../img/icons/32/.png" alt="' . get_lang('ExportPDF') . '" /> ' . get_lang('ExportPDF') . '</a>';
}
$header .= '</td></tr>';
}
@ -305,10 +499,13 @@ class DisplayGradebook
$course_code = $my_category['course_code'];
$status_user = api_get_status_of_user_in_course ($user_id,$course_code);
if (api_is_allowed_to_edit(null, true)) {
$header .= '<a href="gradebook_add_cat.php?'.api_get_cidreq().'&selectcat='.$catobj->get_id().'"><img src="../img/icons/32/new_folder.png" alt="' . get_lang('AddGradebook') . '" /></a></td>';
if ($selectcat == '0') {
if ($show_add_qualification === true) {
// $header .= '<a href="gradebook_add_cat.php?'.api_get_cidreq().'&selectcat=0"><img src="../img/folder_new.gif" alt="' . get_lang('NewCategory') . '" /> ' . get_lang('NewCategory') . '</a></td>';
}
if ($show_add_link) {
//$header .= '<td><a href="gradebook_add_eval.php?'.api_get_cidreq().'"><img src="../img/filenew.gif" alt="' . get_lang('NewEvaluation') . '" /> ' . get_lang('NewEvaluation') . '</a>';
@ -340,13 +537,14 @@ class DisplayGradebook
$my_course_id=api_get_course_id();
$my_file= substr($_SESSION['gradebook_dest'],0,5);
$header .= '<td style="vertical-align: top;"><a href="gradebook_flatview.php?'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() . '">'.Display::return_icon('stats.png', get_lang('FlatView'),'','32').'</a>';
$header .= '<td style="vertical-align: top;"><a href="gradebook_display_certificate.php?'.$my_api_cidreq.'&amp;cat_id='.(int)$_GET['selectcat'].'">'.Display::return_icon('certificate_list.png', get_lang('GradebookSeeListOfStudentsCertificates'),'','32').'</a>';
//$header .= '<td style="vertical-align: top;"><a href="gradebook_flatview.php?'.$my_api_cidreq.'&selectcat=' . $catobj->get_id() . '">'.Display::return_icon('stats.png', get_lang('FlatView'),'','32').'</a>';
//$header .= '<td style="vertical-align: top;"><a href="gradebook_display_certificate.php?'.$my_api_cidreq.'&amp;cat_id='.(int)$_GET['selectcat'].'">'.Display::return_icon('certificate_list.png', get_lang('GradebookSeeListOfStudentsCertificates'),'','32').'</a>';
$visibility_icon = ($catobj->is_visible() == 0) ? 'invisible' : 'visible';
$visibility_command = ($catobj->is_visible() == 0) ? 'set_visible' : 'set_invisible';
//Right icons
$modify_icons = '<a href="gradebook_edit_cat.php?editcat=' . $catobj->get_id() . ' &amp;cidReq='.$catobj->get_course_code().'">'.Display::return_icon('edit.png', get_lang('Edit'),'','32').'</a>';
$modify_icons .= '<a href="../document/document.php?curdirpath=/certificates&'.$my_api_cidreq.'&origin=gradebook&selectcat=' . $catobj->get_id() . '">'.
Display::return_icon('certificate.png', get_lang('AttachCertificate'),'','32').'</a>';
@ -369,6 +567,7 @@ class DisplayGradebook
$header .= '</div>';
echo $header;
if (api_is_allowed_to_edit(null, true)) {
$weight = ((intval($catobj->get_weight())>0) ? $catobj->get_weight() : 0);
$weight = Display::tag('h3', get_lang('TotalWeight').' : '.$weight);
@ -381,7 +580,7 @@ class DisplayGradebook
if (!empty($description)) {
echo Display::div($description, array());
}
}
}
}
function display_reduce_header_gradebook($catobj,$is_course_admin, $is_platform_admin, $simple_search_form, $show_add_qualification = true, $show_add_link = true) {

@ -370,8 +370,9 @@ class EvalForm extends FormValidator
* Builds a form to add an evaluation
*/
protected function build_add_form() {
$this->setDefaults(array (
'hid_user_id' => $this->evaluation_object->get_user_id(), 'hid_category_id' => $this->evaluation_object->get_category_id(), 'hid_course_code' => $this->evaluation_object->get_course_code(), 'created_at' => api_get_utc_datetime()));
$this->setDefaults(array ( 'hid_user_id' => $this->evaluation_object->get_user_id(),
'hid_category_id' => $this->evaluation_object->get_category_id(),
'hid_course_code' => $this->evaluation_object->get_course_code(), 'created_at' => api_get_utc_datetime()));
$this->build_basic_form(0);
if ($this->evaluation_object->get_course_code() == null) {
$this->addElement('checkbox', 'adduser', get_lang('AddUserToEval'));
@ -384,8 +385,14 @@ class EvalForm extends FormValidator
* Builds a form to edit an evaluation
*/
protected function build_editing_form() {
$this->setDefaults(array (
'hid_id' => $this->evaluation_object->get_id(), 'name' => $this->evaluation_object->get_name(), 'description' => $this->evaluation_object->get_description(), 'hid_user_id' => $this->evaluation_object->get_user_id(), 'hid_course_code' => $this->evaluation_object->get_course_code(), 'hid_category_id' => $this->evaluation_object->get_category_id(), 'created_at' => api_get_utc_datetime($this->evaluation_object->get_date()), 'weight' => $this->evaluation_object->get_weight(), 'max' => $this->evaluation_object->get_max(), 'visible' => $this->evaluation_object->is_visible()));
$this->setDefaults(array ( 'hid_id' => $this->evaluation_object->get_id(),
'name' => $this->evaluation_object->get_name(),
'description' => $this->evaluation_object->get_description(),
'hid_user_id' => $this->evaluation_object->get_user_id(),
'hid_course_code' => $this->evaluation_object->get_course_code(),
'hid_category_id' => $this->evaluation_object->get_category_id(),
'created_at' => api_get_utc_datetime($this->evaluation_object->get_date()),
'weight' => $this->evaluation_object->get_weight(), 'max' => $this->evaluation_object->get_max(), 'visible' => $this->evaluation_object->is_visible()));
$id_current=isset($this->id)?$this->id :null;
$this->addElement('hidden', 'hid_id',$id_current);
$this->build_basic_form(1);
@ -404,7 +411,7 @@ class EvalForm extends FormValidator
$this->addElement('header', '', $form_title);
$this->addElement('hidden', 'zero', 0);
$this->addElement('hidden', 'hid_user_id');
$this->addElement('hidden', 'hid_category_id');
//$this->addElement('hidden', 'hid_category_id');
$this->addElement('hidden', 'hid_course_code');
$this->add_textfield('name', get_lang('EvaluationName'), true, array (
'size' => '54',
@ -444,6 +451,23 @@ class EvalForm extends FormValidator
$this->addRule(array ('weight', 'zero'), get_lang('NegativeValue'), 'compare', '>=');
$this->addRule('max', get_lang('OnlyNumbers'), 'numeric');
$this->addRule(array ('max', 'zero'), get_lang('NegativeValue'), 'compare', '>=');
$select_gradebook = $this->addElement('select', 'hid_category_id', get_lang('SelectGradebook'));
$all_categories = Category :: load();
if (!empty($all_categories)) {
foreach($all_categories as $my_cat) {
if ($my_cat->get_course_code() == api_get_course_id()) {
if ($my_cat->get_parent_id() == 0 ) {
$select_gradebook->addoption(get_lang('Default'), $my_cat->get_id());
} else {
$select_gradebook->addoption($my_cat->get_name(), $my_cat->get_id());
}
}
}
}
}
function display() {
parent :: display();

@ -32,32 +32,38 @@ class GradebookTable extends SortableTable {
parent :: __construct ('gradebooklist', null, null, (api_is_allowed_to_create_course()?1:0));
$this->evals_links = array_merge($evals, $links);
$this->currentcat = $currentcat;
$this->datagen = new GradebookDataGenerator($cats, $evals, $links);
if (isset($addparams)) {
$this->set_additional_parameters($addparams);
}
$column= 0;
if (api_is_allowed_to_edit(null, true)) {
$this->set_header($column++,'','','width="25px"');
}
$this->set_header($column++, get_lang('Type'),'','width="35px"');
$this->set_header($column++, get_lang('Name'));
$this->set_header($column++, get_lang('Description'));
$this->set_header($column++, get_lang('Name'), false);
//$this->set_header($column++, get_lang('Description'));
if (api_is_allowed_to_edit(null, true)) {
$this->set_header($column++, get_lang('Weight'),'','width="50px"');
} else {
if (empty($_GET['selectcat']) ) {
$this->set_header($column++, get_lang('Evaluation'));
$this->set_header($column++, get_lang('Evaluation'), false);
} else {
$this->set_header($column++, get_lang('Weight'));
$this->set_header($column++, get_lang('Weight'), false);
}
}
if (api_is_allowed_to_edit(null, true)) {
$this->set_header($column++, get_lang('CreationDate'),true, 'width="100px"');
//$this->set_header($column++, get_lang('CreationDate'),true, 'width="100px"');
} elseif (($status<>1) && !api_is_allowed_to_create_course() && (!isset($_GET['selectcat']) || $_GET['selectcat']==0)) {
$this->set_header($column++, get_lang('Date'),true, 'width="100px"');
//$this->set_header($column++, get_lang('Date'),true, 'width="100px"');
}
//admins get an edit column
if (api_is_allowed_to_edit(null, true)) {
$this->set_header($column++, get_lang('Modify'), false, 'width="120px"');
@ -70,10 +76,10 @@ class GradebookTable extends SortableTable {
if (empty($_GET['selectcat']) && !api_is_allowed_to_create_course()) {
$this->set_header($column++, get_lang('Certificates'),false);
} else {
$evals_links = array_merge($evals, $links);
if(count($evals_links)>0) {
$this->set_header($column++, get_lang('Results'), false);
}
//$evals_links = array_merge($evals, $links);
//if (count($evals_links)>0) {
//$this->set_header($column++, get_lang('Results'), false);
//}
}
}
}
@ -114,27 +120,36 @@ class GradebookTable extends SortableTable {
$sorting = GradebookDataGenerator :: GDG_SORT_DATE;
break;
}
if ($this->direction == 'DESC') {
$sorting |= GradebookDataGenerator :: GDG_SORT_DESC;
} else {
$sorting |= GradebookDataGenerator :: GDG_SORT_ASC;
}
}
$sorting = GradebookDataGenerator :: GDG_SORT_DATE;
$sorting |= GradebookDataGenerator :: GDG_SORT_DESC;
//status of user in course
$user_id = api_get_user_id();
$course_code = api_get_course_id();
$status_user = api_get_status_of_user_in_course ($user_id,$course_code);
$status_user = api_get_status_of_user_in_course($user_id, $course_code);
$data_array = $this->datagen->get_data($sorting, $from, $this->per_page);
// generate the data to display
$sortable_data = array();
$weight_total_links = 0;
$weight_total_links = 0;
foreach ($data_array as $data) {
// list of items inside the gradebook (exercises, lps, fora, etc)
$row = array ();
foreach ($data_array as $data) {
// list of items inside the gradebook (exercises, lps, forums, etc)
$row = array();
$item = $data[0];
$id = $item->get_id();
$id = $item->get_id();
//if the item is invisible, wrap it in a span with class invisible
$invisibility_span_open = (api_is_allowed_to_create_course() && $item->is_visible() == '0') ? '<span class="invisible">' : '';
$invisibility_span_close = (api_is_allowed_to_create_course() && $item->is_visible() == '0') ? '</span>' : '';
@ -142,22 +157,31 @@ class GradebookTable extends SortableTable {
if (api_is_allowed_to_edit(null, true)) {
$row[] = $this->build_id_column($item);
}
$row[] = $this->build_type_column($item);
$row[] = $invisibility_span_open.$this->build_name_link ($item) . $invisibility_span_close;
$row[] = $invisibility_span_open.$data[2] . $invisibility_span_close;
//Name
if (get_class($item) == 'Category') {
$row[] = $invisibility_span_open.'<h2>'.$item->get_name().'</h2>'.$invisibility_span_close;
} else {
$row[] = $invisibility_span_open.$this->build_name_link ($item) . $invisibility_span_close;
}
//Description
//$row[] = $invisibility_span_open.$data[2] . $invisibility_span_close;
//Weight
$row[] = $invisibility_span_open .'<h3>'.$data[3] .'% </h3>'.$invisibility_span_close;
if (api_is_allowed_to_edit(null, true)) {
$row[] = $invisibility_span_open . $data[3] . $invisibility_span_close;
$weight_total_links += intval($data[3]);
} else {
$cattotal = Category :: load($_GET['selectcat']);
$scoretotal = $cattotal[0]->calc_score(api_get_user_id());
$item_value = $scoretotal[0];
$item_value = number_format($item_value, 2, '.', ' ');
$row[] = $invisibility_span_open . $data[3] . $invisibility_span_close;
$item_value = number_format($item_value, 2, '.', ' ');
}
$row[] = $invisibility_span_open.$data[4].$invisibility_span_close;
//Date
//$row[] = $invisibility_span_open.$data[4].$invisibility_span_close;
//Admins get an edit column
if (api_is_allowed_to_edit(null, true)) {
@ -169,13 +193,88 @@ class GradebookTable extends SortableTable {
} else {
//students get the results and certificates columns
if (count($this->evals_links)>0 && $status_user!=1 ) {
$value_data=isset($data[5]) ? $data[5] : null;
$value_data = isset($data[4]) ? $data[4] : null;
if (!is_null($value_data)) {
$row[] = $value_data;
}
}
}
$sortable_data[] = $row;
// Loading childrens
if (get_class($item) == 'Category') {
$stud_id = api_get_user_id();
$course_code = api_get_course_id();
$session_id = api_get_session_id();
$cats = Category :: load ($item->get_id(), null, null, null, null, null, true);
$allcat = $cats[0]->get_subcategories($stud_id, $course_code, $session_id);
$alleval = $cats[0]->get_evaluations($stud_id);
$alllink = $cats[0]->get_links($stud_id);
$sub_cat_info = new GradebookDataGenerator($allcat, $alleval, $alllink);
$data_array = $sub_cat_info->get_data($sorting, $from, $this->per_page);
foreach ($data_array as $data) {
$row = array();
$item = $data[0];
$id = $item->get_id();
//if the item is invisible, wrap it in a span with class invisible
$invisibility_span_open = (api_is_allowed_to_create_course() && $item->is_visible() == '0') ? '<span class="invisible">' : '';
$invisibility_span_close = (api_is_allowed_to_create_course() && $item->is_visible() == '0') ? '</span>' : '';
if (api_is_allowed_to_edit(null, true)) {
$row[] = $this->build_id_column($item);
}
$row[] = $this->build_type_column($item);
//Name
$row[] = $invisibility_span_open."&nbsp;&nbsp;&nbsp; ".$this->build_name_link($item) . $invisibility_span_close;
//Description
//$row[] = $invisibility_span_open.$data[2] . $invisibility_span_close;
//Weight
$row[] = $invisibility_span_open . $data[3] .'%'.$invisibility_span_close;
if (api_is_allowed_to_edit(null, true)) {
//$weight_total_links += intval($data[3]);
} else {
$cattotal = Category :: load($_GET['selectcat']);
$scoretotal = $cattotal[0]->calc_score(api_get_user_id());
$item_value = $scoretotal[0];
$item_value = number_format($item_value, 2, '.', ' ');
}
//Date
//$row[] = $invisibility_span_open.$data[4].$invisibility_span_close;
//Admins get an edit column
if (api_is_allowed_to_edit(null, true)) {
$cat = new Category();
$show_message = $cat->show_message_resource_delete($item->get_course_code());
if ($show_message===false) {
$row[] = $this->build_edit_column($item);
}
} else {
//students get the results and certificates columns
$eval_n_links = array_merge($alleval, $alllink);
if (count($eval_n_links)> 0 && $status_user!=1 ) {
$value_data = isset($data[5]) ? $data[5] : null;
if (!is_null($value_data)) {
$row[] = $value_data;
}
}
}
$sortable_data[] = $row;
}
//add elements
}
}
// warning messages

@ -38,44 +38,36 @@ class LinkAddEditForm extends FormValidator
$link = $link_object;
} elseif (isset ($link_type) && isset ($category_object)) {
$link = LinkFactory :: create ($link_type);
$link->set_course_code(api_get_course_id());
/*
$cc = $category_object->get_course_code();
if (empty($cc) && !empty($_GET['course_code'])) {
$link->set_course_code(Database::escape_string($_GET['course_code']));
} else {
$link->set_course_code($category_object->get_course_code());
}
}*/
} else {
die ('LinkAddEditForm error: define link_type/category_object or link_object');
}
$defaults = array();
$this->addElement('hidden', 'zero', 0);
if (!empty($_GET['editlink']))
{
if (!empty($_GET['editlink'])) {
$this->addElement('header', '', get_lang('EditLink'));
}
// ELEMENT: name
if ($form_type == self :: TYPE_ADD || $link->is_allowed_to_change_name()) {
if ($link->needs_name_and_description()) {
$this->add_textfield('name',
get_lang('Name'),
true,
array('size'=>'40',
'maxlength'=>'40'));
$this->add_textfield('name', get_lang('Name'), true, array('size'=>'40', 'maxlength'=>'40'));
} else {
$select = $this->addElement('select',
'select_link',
get_lang('ChooseItem'));
$select = $this->addElement('select', 'select_link', get_lang('ChooseItem'));
foreach ($link->get_all_links() as $newlink) {
$select->addoption($newlink[1],$newlink[0]);
}
}
} else {
$this->addElement('static',
'label',
get_lang('Name'),
$link->get_name().' ['.$link->get_type_name().']');
$this->addElement('static','label',get_lang('Name'), $link->get_name().' ['.$link->get_type_name().']');
$this->addElement('hidden','name_link',$link->get_name(),array('id'=>'name_link'));
}
@ -120,6 +112,21 @@ class LinkAddEditForm extends FormValidator
if ($form_type == self :: TYPE_EDIT) {
$defaults['visible'] = $link->is_visible();
}
$select_gradebook = $this->addElement('select', 'select_gradebook', get_lang('SelectGradebook'));
if (!empty($category_object)) {
foreach($category_object as $my_cat) {
if ($my_cat->get_course_code() == api_get_course_id()) {
if ($my_cat->get_parent_id() == 0 ) {
$select_gradebook->addoption(get_lang('Default'), $my_cat->get_id());
} else {
$select_gradebook->addoption($my_cat->get_name(), $my_cat->get_id());
}
}
}
}
// ELEMENT: add results
if ($form_type == self :: TYPE_ADD && $link->needs_results()) {
$this->addElement('checkbox', 'addresult', get_lang('AddResult'));

@ -74,14 +74,10 @@ class LinkForm extends FormValidator
protected function build_create() {
$this->addElement('header', '', get_lang('MakeLink'));
$select = $this->addElement('select',
'select_link',
get_lang('ChooseLink'),
null,
array('onchange' => 'document.create_link.submit()'));
$select = $this->addElement('select', 'select_link', get_lang('ChooseLink'), null, array('onchange' => 'document.create_link.submit()'));
$linktypes = LinkFactory :: get_all_types();
$select->addoption('['.get_lang('ChooseLink').']', 0);
$cc = $this->category_object->get_course_code();
@ -92,13 +88,13 @@ class LinkForm extends FormValidator
} elseif(!empty($_GET['course_code'])) {
$link->set_course_code(Database::escape_string($_GET['course_code']));
}
// disable this element if the link works with a dropdownlist
// and if there are no links left
if (!$link->needs_name_and_description()
&& count($link->get_all_links()) == '0') {
if (!$link->needs_name_and_description() && count($link->get_all_links()) == '0') {
$select->addoption($link->get_type_name(), $linktype, 'disabled');
} else {
$select->addoption($link->get_type_name(), $linktype);
$select->addoption($link->get_type_name(), $linktype);
}
}

@ -97,14 +97,13 @@ class GradebookDataGenerator
$row[] = $item->get_description();
$row[] = $item->get_weight();
if (api_is_allowed_to_edit(null, true)) {
$row[] = $this->build_date_column($item);
}
if (count($this->evals_links)>0) {
if (!api_is_allowed_to_create_course() || $status_user != 1 ) {
//$row[] = $this->build_date_column($item);
}
if (count($this->evals_links) > 0) {
if (!api_is_allowed_to_create_course() || $status_user != 1 ) {
$row[] = $this->build_result_column($item, $ignore_score_color);
}
}
}
$data[] = $row;
}
return $data;
@ -180,9 +179,9 @@ class GradebookDataGenerator
private function build_result_column($item, $ignore_score_color) {
$scoredisplay = ScoreDisplay :: instance();
$score = $item->calc_score(api_get_user_id());
$score = $item->calc_score(api_get_user_id());
if (!empty($score)) {
if (!empty($score)) {
switch ($item->get_item_type()) {
// category
case 'C' :

@ -202,14 +202,18 @@ function build_edit_icons_cat($cat, $selectcat) {
$visibility_icon= ($cat->is_visible() == 0) ? 'invisible' : 'visible';
$visibility_command= ($cat->is_visible() == 0) ? 'set_visible' : 'set_invisible';
$modify_icons= '<a href="gradebook_edit_cat.php?editcat=' . $cat->get_id() . ' &amp;cidReq='.$cat->get_course_code().'">'.Display::return_icon('edit.png', get_lang('Modify'),'','22').'</a>';
$modify_icons .= '&nbsp;<a href="' . api_get_self() . '?deletecat=' . $cat->get_id() . '&amp;selectcat=' . $selectcat . '&amp;cidReq='.$cat->get_course_code().'" onclick="return confirmation();">'.Display::return_icon('delete.png', get_lang('DeleteAll'),'','22').'</a>';
$modify_icons .= '&nbsp;<a href="' . api_get_self() . '?visiblecat=' . $cat->get_id() . '&amp;' . $visibility_command . '=&amp;selectcat=' . $selectcat . ' ">'.Display::return_icon($visibility_icon.'.png', get_lang('Visible'),'','22').'</a>';
//no move ability for root categories
if ($cat->is_movable()) {
$modify_icons .= '&nbsp;<a href="' . api_get_self() . '?movecat=' . $cat->get_id() . '&amp;selectcat=' . $selectcat . ' &amp;cidReq='.$cat->get_course_code().'"><img src="../img/deplacer_fichier.gif" border="0" title="' . get_lang('Move') . '" alt="" /></a>';
/*$modify_icons .= '&nbsp;<a href="' . api_get_self() . '?movecat=' . $cat->get_id() . '&amp;selectcat=' . $selectcat . ' &amp;cidReq='.$cat->get_course_code().'">
<img src="../img/icons/22/move.png" border="0" title="' . get_lang('Move') . '" alt="" /></a>';*/
} else {
//$modify_icons .= '&nbsp;<img src="../img/deplacer_fichier_na.gif" border="0" title="' . get_lang('Move') . '" alt="" />';
}
$modify_icons .= '&nbsp;<a href="' . api_get_self() . '?visiblecat=' . $cat->get_id() . '&amp;' . $visibility_command . '=&amp;selectcat=' . $selectcat . ' ">'.Display::return_icon($visibility_icon.'.png', get_lang('Visible'),'','22').'</a>';
$modify_icons .= '&nbsp;<a href="' . api_get_self() . '?deletecat=' . $cat->get_id() . '&amp;selectcat=' . $selectcat . '&amp;cidReq='.$cat->get_course_code().'" onclick="return confirmation();">'.Display::return_icon('delete.png', get_lang('DeleteAll'),'','22').'</a>';
return $modify_icons;
}

@ -2265,7 +2265,9 @@ function fill_Db_course($course_id, $course_repository, $language, $default_docu
Database::query("INSERT INTO $TABLESETTING (c_id, variable,value,category) VALUES ($course_id, 'display_info_advance_inside_homecourse',1,'thematic_advance')");
Database::query("INSERT INTO $TABLESETTING (c_id, variable,value,category) VALUES ($course_id, 'email_alert_students_on_new_homework',0,'work')");
Database::query("INSERT INTO $TABLESETTING (c_id, variable,value,category) VALUES ($course_id, 'enable_lp_auto_launch',0,'learning_path')");
Database::query("INSERT INTO $TABLESETTING (c_id, variable,value,category) VALUES ($course_id, 'pdf_export_watermark_text','','learning_path')");
Database::query("INSERT INTO $TABLESETTING (c_id, variable,value,category) VALUES ($course_id, 'pdf_export_watermark_text','','learning_path')");
Database::query("INSERT INTO $TABLESETTING (c_id, variable,value,category) VALUES ($course_id, 'course_grading_model','0','gradebook')");
/* Course homepage tools for platform admin only */
/* Group tool */

@ -1279,7 +1279,7 @@ class Database {
}
if (!empty($update_sql)) {
//Parsing and cleaning the where conditions
$where_return = self::parse_where_conditions($where_conditions);
$where_return = self::parse_where_conditions($where_conditions);
$sql = "UPDATE $table_name SET $update_sql $where_return ";
if ($show_query) { echo $sql; echo '<br />'; }
$result = self::query($sql);

@ -1016,10 +1016,9 @@ function api_get_course_path($course_code = null) {
*/
function api_get_course_setting($setting_name, $course_code = null) {
$course_info = api_get_course_info($course_code);
$table = Database::get_course_table(TABLE_COURSE_SETTING);
$table = Database::get_course_table(TABLE_COURSE_SETTING);
$setting_name = Database::escape_string($setting_name);
$sql = "SELECT value FROM $table WHERE c_id = {$course_info['real_id']} AND variable = '$setting_name'";
$sql = "SELECT value FROM $table WHERE c_id = {$course_info['real_id']} AND variable = '$setting_name'";
$res = Database::query($sql);
if (Database::num_rows($res) > 0) {
$row = Database::fetch_array($res);
@ -3675,6 +3674,38 @@ function api_get_status_langvars() {
);
}
/**
* The function that retrieves all the possible settings for a certain config setting
* @author Patrick Cool <patrick.cool@UGent.be>, Ghent University
*/
function api_get_settings_options($var) {
$table_settings_options = Database :: get_main_table(TABLE_MAIN_SETTINGS_OPTIONS);
$sql = "SELECT * FROM $table_settings_options WHERE variable = '$var' ORDER BY id";
$result = Database::query($sql);
while ($row = Database::fetch_array($result, 'ASSOC')) {
//$temp_array = array ('value' => $row['value'], 'display_text' => $row['display_text']);
$settings_options_array[] = $row;
}
return $settings_options_array;
}
function api_set_setting_option($params) {
$table = Database::get_main_table(TABLE_MAIN_SETTINGS_OPTIONS);
if (empty($params['id'])) {
Database::insert($table, $params);
} else {
Database::update($table, $params, array('id = ? '=> $params['id']));
}
}
function api_delete_setting_option($id) {
$table = Database::get_main_table(TABLE_MAIN_SETTINGS_OPTIONS);
if (!empty($id)) {
Database::delete($table, array('id = ? '=> $id));
}
}
/**
* Sets a platform configuration setting to a given value
* @param string The variable we want to update
@ -5361,4 +5392,50 @@ function api_get_course_table_condition($and = true) {
$condition = " $condition_add c_id = $course_id";
}
return $condition;
}
function api_grading_model_functions($grading_model, $action = 'to_array') {
$return = null;
if (empty($grading_model)) {
return null;
}
$elements = array('A','B','C','D','E', 'F', 'G', 'H','I','J', 'K');
if (in_array($action, array('to_array', 'decorate'))) {
$parts = explode('/', $grading_model);
$return['denominator'] = $parts[1];
$sums = explode('+', $parts[0]);
$j = 0;
foreach($sums as $item) {
$item = explode('*', $item);
$per = 0;
if (!empty($return['denominator'])) {
$per = $item[0]/$return['denominator']*100;
}
$return['items'][] =array( 'letter' => $elements[$j],
'value' => $item[0],
'percentage'=> $per.'%');
$j++;
}
if ($action == 'decorate') {
$return_value = '';
$items = $return['items'];
$j = 1;
foreach ($items as $item) {
$letter = $item['letter'];
$value = $item['value'];
$sum = '+';
if (count($items) == $j){
$sum = '';
}
$return_value = $return_value.' '.$value.'*'.$letter." $sum ";
$j++;
}
$return = ' ('.$return_value.') / '.$return['denominator'];
}
}
return $return;
}

@ -91,6 +91,21 @@ ALTER TABLE group_rel_group ADD INDEX ( group_id );
ALTER TABLE group_rel_group ADD INDEX ( subgroup_id );
ALTER TABLE group_rel_group ADD INDEX ( relation_type );
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('allow_teacher_change_gradebook_grading_model', NULL, 'radio', 'Gradebook', 'false', 'AllowTeacherChangeGradebookGradingModelTitle', 'AllowTeacherChangeGradebookGradingModelComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_teacher_change_gradebook_grading_model', 'true', 'Yes');
INSERT INTO settings_options (variable, value, display_text) VALUES ('allow_teacher_change_gradebook_grading_model', 'false', 'No');
INSERT INTO settings_current (variable, subkey, type, category, selected_value, title, comment, scope, subkeytext, access_url_changeable) VALUES ('grading_model', 'grading_model', 'custom', 'Gradebook', 'false', 'GradingModelTitle', 'GradingModelComment', NULL, NULL, 1);
INSERT INTO settings_options (variable, value, display_text) VALUES ('grading_model', '1*X+2*X+3*X/4', 'Model 1');
INSERT INTO settings_options (variable, value, display_text) VALUES ('grading_model', '1*X+1*X+1*X/3', 'Model 2');
INSERT INTO settings_options (variable, value, display_text) VALUES ('grading_model', '1*X+1*X+1*X+1*X/4', 'Model 3');
-- xxSTATSxx
ALTER TABLE track_e_exercices ADD COLUMN questions_to_check TEXT NOT NULL DEFAULT '';
--CREATE TABLE track_filtered_terms (id int, user_id int, course_id int, session_id int, tool_id char(12), filtered_term varchar(255), created_at datetime);
@ -109,3 +124,5 @@ ALTER TABLE stored_values_stack ADD UNIQUE (user_id, sco_id, course_id, sv_key,
ALTER TABLE lp ADD COLUMN hide_toc_frame TINYINT NOT NULL DEFAULT 0;
ALTER TABLE lp ADD COLUMN seriousgame_mode TINYINT NOT NULL DEFAULT 0;
ALTER TABLE lp_item_view modify column suspend_data longtext;
INSERT INTO course_setting(c_id, variable,value,category) VALUES ('course_grading_model','','gradebook');

Loading…
Cancel
Save