WIP: Add score model in student publication see BT#12898

pull/2487/head
jmontoyaa 8 years ago
parent c0d9086ca4
commit eea9ca4d7f
  1. 14
      app/Resources/public/css/base.css
  2. 5
      main/exercise/exercise_report.php
  3. 30
      main/exercise/exercise_show.php
  4. 77
      main/inc/lib/exercise.lib.php
  5. 2
      main/work/view.php
  6. 47
      main/work/work.lib.php

@ -6724,29 +6724,31 @@ input.form-control[type="color"] {
background-color: #EF5F00;
border: none;
}
.exercise_mark_select .dropdown-menu>.active>a.btn-danger,
.exercise_mark_select .dropdown-menu>li>a.btn-danger:focus,
.exercise_mark_select .dropdown-menu>li>a.btn-danger:hover {
opacity: 0.8;
background-color: #d9534f;
background-color: #d9534f !important;
}
.exercise_mark_select .dropdown-menu>.active>a.btn-orange,
.exercise_mark_select .dropdown-menu>li>a.btn-orange:focus,
.exercise_mark_select .dropdown-menu>li>a.btn-orange:hover {
background-color: #EF7710;
background-color: #EF7710 !important;
opacity: 0.8 !important;
}
.exercise_mark_select .dropdown-menu>.active>a.btn-warning,
.exercise_mark_select .dropdown-menu>li>a.btn-warning:focus,
.exercise_mark_select .dropdown-menu>li>a.btn-warning:hover {
background-color: #f0ad4e;
background-color: #f0ad4e !important;
opacity: 0.8 !important;
}
.exercise_mark_select .dropdown-menu>.active>a.btn-success,
.exercise_mark_select .dropdown-menu>li>a.btn-success:focus,
.exercise_mark_select .dropdown-menu>li>a.btn-success:hover {
background-color: #5cb85c;
background-color: #5cb85c !important;
opacity: 0.8 !important;
}

@ -170,9 +170,10 @@ if (isset($_REQUEST['comments']) &&
} else {
$array_content_id_exe = $post_content_id;
}
var_dump($_POST, $array_content_id_exe);
for ($i = 0; $i < $loop_in_track; $i++) {
$my_marks = isset($_POST['marks_'.$array_content_id_exe[$i]]) ? $_POST['marks_'.$array_content_id_exe[$i]] : '';
$contain_comments = $_POST['comments_'.$array_content_id_exe[$i]];
if (isset($contain_comments)) {
$my_comments = $_POST['comments_'.$array_content_id_exe[$i]];
@ -185,6 +186,8 @@ if (isset($_REQUEST['comments']) &&
'marks' => $my_marks,
'teacher_comment' => $my_comments
];
Database::update(
$TBL_TRACK_ATTEMPT,
$params,

@ -173,13 +173,7 @@ if ($allowRecordAudio && $allowTeacherCommentAudio) {
$htmlHeadXtra[] = api_get_js('record_audio/record_audio.js');
}
// Filling the scores with the right colors.
$models = ExerciseLib::getCourseScoreModel();
$cssListToString = '';
if (!empty($models)) {
$cssList = array_column($models['score_list'], 'css_class');
$cssListToString = implode(' ', $cssList);
}
$scoreJsCode = ExerciseLib::getJsCode();
if ($origin != 'learnpath') {
Display::display_header('');
@ -193,27 +187,7 @@ if ($origin != 'learnpath') {
}
?>
<script>
<?php if (!empty($cssListToString)) { ?>
function updateSelect(element) {
var spanTag = element.parent().find('span.filter-option');
var value = element.val();
var optionClass = $('.exercise_mark_select option[value="'+value+'"]').attr('class');
spanTag.removeClass('<?php echo $cssListToString; ?>');
spanTag.addClass(optionClass);
}
$(document).ready( function() {
// Loading values
$('.exercise_mark_select').on('loaded.bs.select', function() {
updateSelect($(this));
});
// On change
$('.exercise_mark_select').on('changed.bs.select', function(e, clickedIndex) {
updateSelect($(this));
});
});
<?php } ?>
<?php echo $scoreJsCode; ?>
var maxEditors = <?php echo intval($maxEditors); ?>;
function showfck(sid, marksid) {

@ -2434,6 +2434,79 @@ HOTSPOT;
return false;
}
public static function addScoreModelInput(FormValidator & $form, $name, $weight, $selected)
{
$model = self::getCourseScoreModel();
if (empty($model)) {
return false;
}
/** @var HTML_QuickForm_select $element */
$element = $form->createElement(
'select',
$name,
get_lang('Qualification'),
[],
['class' => 'exercise_mark_select']
);
foreach ($model['score_list'] as $item) {
$i = api_number_format($item['score_to_qualify'] / 100 * $weight, 2);
$label = ExerciseLib::getModelStyle($item, $i);
$attributes = [
'class' => $item['css_class']
];
if ($selected == $i) {
$attributes['selected'] = 'selected';
}
$element->addOption($label, $i, $attributes);
}
$form->addElement($element);
}
/**
* @return string
*/
public static function getJsCode()
{
// Filling the scores with the right colors.
$models = ExerciseLib::getCourseScoreModel();
$cssListToString = '';
if (!empty($models)) {
$cssList = array_column($models['score_list'], 'css_class');
$cssListToString = implode(' ', $cssList);
}
if (empty($cssListToString)) {
return '';
}
$js = <<<EOT
function updateSelect(element) {
var spanTag = element.parent().find('span.filter-option');
var value = element.val();
var selectId = element.attr('id');
var optionClass = $('#' + selectId + ' option[value="'+value+'"]').attr('class');
spanTag.removeClass('$cssListToString');
spanTag.addClass(optionClass);
}
$(document).ready( function() {
// Loading values
$('.exercise_mark_select').on('loaded.bs.select', function() {
updateSelect($(this));
});
// On change
$('.exercise_mark_select').on('changed.bs.select', function() {
updateSelect($(this));
});
});
EOT;
return $js;
}
/**
* @param float $score
* @param float $weight
@ -3646,7 +3719,7 @@ HOTSPOT;
$sql = "SELECT DISTINCT exe_user_id
FROM $track_exercises e
INNER JOIN $track_attempt a
INNER JOIN $track_attempt a
ON (a.exe_id = e.exe_id)
WHERE
exe_exo_id = $exercise_id AND
@ -4119,7 +4192,7 @@ HOTSPOT;
return '<div class="ribbon">
<div class="rib rib-'.$class.'">
<h3>'.$scoreLabel.'</h3>
</div>
</div>
<h4>'.get_lang('Score').': '.$result.'</h4>
</div>'
;

@ -17,10 +17,10 @@ if ($work['active'] != 1) {
api_not_allowed(true);
}
$work['title'] = isset($work['title']) ? Security::remove_XSS($work['title']) : '';
$work['description'] = isset($work['description']) ? Security::remove_XSS($work['description']) : '';
$htmlHeadXtra[] = '<script>'.ExerciseLib::getJsCode().'</script>';
$interbreadcrumb[] = array(
'url' => api_get_path(WEB_CODE_PATH).'work/work.php?'.api_get_cidreq(),
'name' => get_lang('StudentPublications'),

@ -1587,6 +1587,7 @@ function getWorkListTeacher(
return $row['count'];
}
$url = api_get_path(WEB_CODE_PATH).'work/work_list_all.php?'.api_get_cidreq();
while ($work = Database::fetch_array($result, 'ASSOC')) {
$workId = $work['id'];
@ -3300,16 +3301,25 @@ function formatWorkScore($score, $weight)
if (!empty($weight)) {
$relativeScore = $score / $weight;
}
if ($relativeScore < 0.5) {
$label = 'important';
} elseif ($relativeScore < 0.75) {
$label = 'warning';
}
return Display::label(
api_number_format($score, 1).' / '.$weight,
$label
);
$scoreBasedInModel = ExerciseLib::convertScoreToModel($relativeScore);
if (empty($scoreBasedInModel)) {
$finalScore = api_number_format($score, 1).' / '.$weight;
return Display::label(
$finalScore,
$label
);
} else {
$finalScore = $scoreBasedInModel;
return $finalScore;
}
}
/**
@ -3499,15 +3509,26 @@ function getWorkCommentForm($work, $workParent)
if (api_is_allowed_to_edit()) {
if (!empty($qualification) && intval($qualification) > 0) {
$form->addFloat(
'qualification',
array(get_lang('Qualification'), " / ".$qualification),
false,
[],
false,
0,
$qualification
);
$model = ExerciseLib::getCourseScoreModel();
if (empty($model)) {
$form->addFloat(
'qualification',
array(get_lang('Qualification'), " / ".$qualification),
false,
[],
false,
0,
$qualification
);
} else {
ExerciseLib::addScoreModelInput(
$form,
'qualification',
$qualification,
$work['qualification']
);
}
$form->addFile('file', get_lang('Correction'));
$form->setDefaults(['qualification' => $work['qualification']]);

Loading…
Cancel
Save