Add 'config gradebook_dependency_mandatory_courses' see BT#13099

- Minor - rename function shows_all_information_an_category to
 showAllCategoryInfo.
pull/2487/head
jmontoyaa 8 years ago
parent 44f4bf0244
commit 4c08b6b3b5
  1. 2
      main/gradebook/gradebook_edit_all.php
  2. 44
      main/gradebook/lib/be/category.class.php
  3. 11
      main/gradebook/lib/fe/displaygradebook.php
  4. 24
      main/inc/lib/userportal.lib.php
  5. 4
      main/install/configuration.dist.php
  6. 31
      main/template/default/layout/layout_2_col.tpl
  7. 113
      user_portal.php

@ -93,7 +93,7 @@ $parent_cat = Category::load($parent_id);
$my_category = array();
$cat = new Category();
$my_category = $cat->shows_all_information_an_category($my_selectcat);
$my_category = $cat->showAllCategoryInfo($my_selectcat);
$original_total = $my_category['weight'];
$masked_total = $parent_cat[0]->get_weight();

@ -815,15 +815,14 @@ class Category implements GradebookItem
/**
* Shows all information of an category
*/
public function shows_all_information_an_category($categoryId = '')
public function showAllCategoryInfo($categoryId = '')
{
if ($categoryId == '') {
return null;
} else {
$table = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
$sql = 'SELECT name,description,user_id,course_code,parent_id,weight,visible,certif_min_score,session_id, generate_certificates, is_requirement
FROM '.$table.' c
WHERE c.id='.intval($categoryId);
$sql = 'SELECT * FROM '.$table.'
WHERE id = '.intval($categoryId);
$result = Database::query($sql);
$row = Database::fetch_array($result, 'ASSOC');
@ -2171,7 +2170,10 @@ class Category implements GradebookItem
// Do not remove this the gradebook/lib/fe/gradebooktable.class.php
// file load this variable as a global
$scoredisplay = ScoreDisplay::instance();
$my_score_in_gradebook = $scoredisplay->display_score($scoretotal, SCORE_SIMPLE);
$my_score_in_gradebook = $scoredisplay->display_score(
$scoretotal,
SCORE_SIMPLE
);
$userFinishedCourse = self::userFinishedCourse(
$user_id,
$cats_course[0],
@ -2185,7 +2187,10 @@ class Category implements GradebookItem
return false;
}
$skillToolEnabled = Skill::hasAccessToUserSkill(api_get_user_id(), $user_id);
$skillToolEnabled = Skill::hasAccessToUserSkill(
api_get_user_id(),
$user_id
);
$userHasSkills = false;
if ($skillToolEnabled) {
@ -2198,7 +2203,11 @@ class Category implements GradebookItem
);
$objSkillRelUser = new SkillRelUser();
$userSkills = $objSkillRelUser->get_user_skills($user_id, $courseId, $sessionId);
$userSkills = $objSkillRelUser->get_user_skills(
$user_id,
$courseId,
$sessionId
);
$userHasSkills = !empty($userSkills);
if (!$category->getGenerateCertificates() && $userHasSkills) {
@ -2380,7 +2389,7 @@ class Category implements GradebookItem
* To check by the category ID
* @param string $courseCode Optional. The course code
* @param int $sessionId Optional. The session ID
* @param boolean $recalcutateScore Whether recalculate the score
* @param boolean $recalculateScore Whether recalculate the score
* @return boolean
*/
public static function userFinishedCourse(
@ -2389,7 +2398,7 @@ class Category implements GradebookItem
$categoryId = 0,
$courseCode = null,
$sessionId = 0,
$recalcutateScore = false
$recalculateScore = false
) {
if (is_null($category) && empty($categoryId)) {
return false;
@ -2421,7 +2430,7 @@ class Category implements GradebookItem
$category->get_id(),
$courseCode,
$sessionId,
$recalcutateScore
$recalculateScore
);
$minCertificateScore = $category->get_certificate_min_score();
@ -2447,7 +2456,12 @@ class Category implements GradebookItem
$recalculate = false
) {
if ($recalculate) {
return self::calculateCurrentScore($userId, $categoryId, $courseCode, $sessionId);
return self::calculateCurrentScore(
$userId,
$categoryId,
$courseCode,
$sessionId
);
}
$resultData = Database::select(
@ -2478,8 +2492,12 @@ class Category implements GradebookItem
* @param int $sessionId Optional. The session id
* @return float The score
*/
private static function calculateCurrentScore($userId, $categoryId, $courseCode, $sessionId)
{
private static function calculateCurrentScore(
$userId,
$categoryId,
$courseCode,
$sessionId
) {
$cats_course = self::load(
$categoryId,
null,

@ -356,7 +356,7 @@ class DisplayGradebook
Display::return_icon('new_folder.png', get_lang('AddGradebook'), array(), ICON_SIZE_MEDIUM).'</a></td>';
}
if ($selectcat != '0') {
$my_category = $catobj->shows_all_information_an_category($catobj->get_id());
$my_category = $catobj->showAllCategoryInfo($catobj->get_id());
if ($my_api_cidreq == '') {
$my_api_cidreq = 'cidReq='.$my_category['course_code'];
}
@ -400,6 +400,15 @@ class DisplayGradebook
"gradebook_display_summary.php?$my_api_cidreq&selectcat=".$selectcat
);
$allow = api_get_configuration_value('gradebook_custom_student_report');
if ($allow) {
$actionsLeft .= Display::url(
get_lang('GenerateCustomReport'),
api_get_path(WEB_AJAX_PATH)."gradebook.ajax.php?$my_api_cidreq&a=generate_custom_report",
['class' => 'btn btn-default ajax']
);
}
// Right icons
$actionsRight = '<a href="gradebook_edit_cat.php?editcat='.$catobj->get_id().'&amp;cidReq='.$catobj->get_course_code().'&id_session='.$catobj->get_session_id().'">'.
Display::return_icon('edit.png', get_lang('Edit'), '', ICON_SIZE_MEDIUM).'</a>';

@ -1142,8 +1142,11 @@ class IndexManager
* @param string $categoryCodeFilter
* @return string
*/
public function returnCoursesAndSessions($user_id, $showSessions = true, $categoryCodeFilter = '')
{
public function returnCoursesAndSessions(
$user_id,
$showSessions = true,
$categoryCodeFilter = ''
) {
$gameModeIsActive = api_get_setting('gamification_mode');
$listCourse = '';
$specialCourseList = '';
@ -1172,6 +1175,7 @@ class IndexManager
$studentInfoProgress = (!empty($studentInfo['progress']) && $studentInfo['progress'] === true);
$studentInfoScore = (!empty($studentInfo['score']) && $studentInfo['score'] === true);
$studentInfoCertificate = (!empty($studentInfo['certificate']) && $studentInfo['certificate'] === true);
$courseCompleteList = [];
// If we're not in the history view...
if (!isset($_GET['history'])) {
@ -1319,17 +1323,15 @@ class IndexManager
$courses['not_category'][$key]['student_info']['certificate'] = null;
if (isset($category[0])) {
$certificateAvailable = $category[0]->is_certificate_available($user_id);
if ($viewGrid == 'true') {
if ($category[0]->is_certificate_available($user_id)) {
if ($certificateAvailable) {
$courses['not_category'][$key]['student_info']['certificate'] = get_lang('Yes');
} else {
$courses['not_category'][$key]['student_info']['certificate'] = get_lang('No');
}
} else {
if ($category[0]->is_certificate_available(
$user_id
)
) {
if ($certificateAvailable) {
$courses['not_category'][$key]['student_info']['certificate'] = Display::label(
get_lang('Yes'),
'success'
@ -1389,6 +1391,7 @@ class IndexManager
$listCourse .= $this->tpl->fetch(
$this->tpl->get_template($coursesWithoutCategoryTemplate)
);
$courseCompleteList = $courses['in_category'] + $courses['not_category'];
}
$courseCount = count($specialCourses) + count($courses['in_category']) + count($courses['not_category']);
@ -1797,6 +1800,8 @@ class IndexManager
}
return [
'courses' => $courseCompleteList,
'sessions' => $session_categories,
'html' => trim($specialCourseList.$sessions_with_category.$sessions_with_no_category.$listCourse),
'session_count' => $sessionCount,
'course_count' => $courseCount
@ -2012,6 +2017,8 @@ class IndexManager
return [
'html' => $html,
'sessions' => $session_categories,
'courses' => $listCoursesInfo,
'session_count' => $sessionCount,
'course_count' => $courseCount
];
@ -2251,10 +2258,9 @@ class IndexManager
* @param $userId
* @return array
*/
public static function returnCourseCategoryListFromUser($userId)
public function returnCourseCategoryListFromUser($userId)
{
$sessionCount = 0;
$courseList = CourseManager::get_courses_list_by_user_id($userId);
$categoryCodes = CourseManager::getCourseCategoriesFromCourseList($courseList);
$categories = [];

@ -583,3 +583,7 @@ $_configuration['score_grade_model'] = [
// ALTER TABLE gradebook_category ADD COLUMN depends TEXT DEFAULT NULL;
// ALTER TABLE gradebook_category ADD COLUMN minimum_to_validate INT DEFAULT NULL;
// $_configuration['gradebook_dependency'] = false;
// Courses id list to check in the gradebook sidebar see BT#13099
$_configuration['gradebook_dependency_mandatory_courses'] = [
'courses' => [1, 2]
];

@ -138,6 +138,37 @@
<!-- end block course -->
{% endif %}
{% if grade_book_result_validate is defined %}
<div class="panel-group" id="skill" role="tablist" aria-multiselectable="true">
<div class="panel panel-default" id="gradebook_block">
<div class="panel-heading" role="tab">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#skill" href="#skillCollapse" aria-expanded="true" aria-controls="skillCollapse">
{{ 'Gradebook' | get_lang }}
</a>
</h4>
</div>
<div style="" aria-expanded="true" id="skillCollapse" class="panel-collapse collapse in" role="tabpanel">
<div class="panel-body">
<ul class="list-group">
<li class="list-group-item {{ item.class }}">
<span class="item-icon">
{{ 'Completed' | get_lang }} :
{% if grade_book_result_completed == true %}
{{ 'Yes' | get_lang }}
{% else %}
{{ 'No' | get_lang }}
{% endif %}
</span>
</li>
</ul>
</div>
</div>
</div>
</div>
{% endif %}
{% if skills_block %}
<!-- block skills -->
<div class="panel-group" id="skill" role="tablist" aria-multiselectable="true">

@ -2,6 +2,7 @@
/* For licensing terms, see /license.txt */
use ChamiloSession as Session;
use Doctrine\Common\Collections\Criteria;
/**
* This is the index file displayed when a user is logged in on Chamilo.
@ -276,6 +277,118 @@ $controller->tpl->assign('course_history_page', $historyClass);
if ($myCourseListAsCategory) {
$controller->tpl->assign('header', get_lang('MyCourses'));
}
$allow = api_get_configuration_value('gradebook_dependency');
if (!empty($courseAndSessions['courses']) && $allow) {
$courseList = api_get_configuration_value('gradebook_dependency_mandatory_courses');
$courseList = isset($courseList['courses']) ? $courseList['courses'] : [];
$mandatoryCourse = [];
if (!empty($courseList)) {
foreach ($courseList as $courseId) {
$courseInfo = api_get_course_info_by_id($courseId);
$mandatoryCourse[] = $courseInfo['code'];
}
}
// @todo improve calls of course info
$subscribedCourses = $courseAndSessions['courses'];
$mainCategoryList = [];
foreach ($subscribedCourses as $courseInfo) {
$courseCode = $courseInfo['course_code'];
$categories = Category::load(null, null, $courseCode);
/** @var Category $category */
$category = $categories[0];
$mainCategoryList[]= $category;
}
$total = [];
foreach ($mainCategoryList as $category) {
$parentScore = Category::getCurrentScore(
$userId,
$category->get_id(),
$category->get_course_code(),
0,
true
);
$dependencies = $category->getCourseListDependency();
$children = [];
$totalScoreWithChildren = 0;
if (!empty($dependencies)) {
foreach ($dependencies as $courseId) {
$courseInfo = api_get_course_info_by_id($courseId);
$courseCode = $courseInfo['code'];
$categories = Category::load(null, null, $courseCode);
/** @var Category $subCategory */
$subCategory = $categories[0];
$score = Category::getCurrentScore(
$userId,
$subCategory->get_id(),
$subCategory->get_course_code(),
0,
true
);
$totalScoreWithChildren += $score;
$children[$subCategory->get_course_code()] = ['score' => $score];
}
}
$totalScoreWithChildren += $parentScore;
$totalScoreWithChildrenAverage = $parentScore;
if (!empty($children)) {
$totalScoreWithChildrenAverage = $totalScoreWithChildren / (1 + count($children));
}
$total[$category->get_course_code()] = [
'score' => $parentScore,
'total_score_with_children' => api_number_format($totalScoreWithChildrenAverage),
'children' => $children
];
}
$finalScore = 0;
$customTotalPercentage = 0;
$maxPercentage = 80;
$maxCustomPercentageCounter = 0;
$validatedCoursesPercentage = 0;
foreach ($total as $courseCode => $data) {
$totalScoreWithChildren = $data['total_score_with_children'];
if (in_array($courseCode, $mandatoryCourse)) {
if ($totalScoreWithChildren == 100) {
$finalScore = 0;
$customTotalPercentage += 10;
$validatedCoursesPercentage += 10;
break;
}
} else {
$maxCustomPercentageCounter++;
if ($customTotalPercentage < $maxPercentage &&
$totalScoreWithChildren == 100
) {
$customTotalPercentage += 10;
}
}
$finalScore += $totalScoreWithChildren;
}
$completed = false;
if ($validatedCoursesPercentage == 20 && $customTotalPercentage == 80) {
$completed = true;
}
$controller->tpl->assign(
'grade_book_result_validate',
$validatedCoursesPercentage
);
$controller->tpl->assign('grade_book_result_completed', $completed);
/*if ($finalScore > 0) {
$finalScore = (int) $finalScore / count($total);
if ($finalScore == 100) {
$completed = true;
}
}*/
}
$controller->tpl->display_two_col_template();
// Deleting the session_id.

Loading…
Cancel
Save