Add user_portal_load_notification_by_ajax setting to improve page load see BT#12052

pull/2487/head
jmontoyaa 9 years ago
parent 73724abf0f
commit 8ffb7fe912
  1. 26
      main/inc/ajax/course_home.ajax.php
  2. 23
      main/inc/lib/display.lib.php
  3. 3
      main/install/configuration.dist.php
  4. 22
      user_portal.php

@ -1,5 +1,8 @@
<?php
/* For licensing terms, see /license.txt */
use ChamiloSession as Session;
// @todo refactor this script, create a class that manage the jqgrid requests
/**
* Responses to AJAX calls
@ -503,8 +506,31 @@ switch ($action) {
$response->records = $count;
echo json_encode($response);
break;
case 'get_notification':
$courseId = isset($_REQUEST['course_id']) ? (int) $_REQUEST['course_id'] : 0;
$sessionId = isset($_REQUEST['session_id']) ? (int) $_REQUEST['session_id'] : 0;
$status = isset($_REQUEST['status']) ? (int) $_REQUEST['status'] : 0;
if (empty($courseId)) {
break;
}
require_once __DIR__.'/../global.inc.php';
$courseInfo = api_get_course_info_by_id($courseId);
$courseInfo['id_session'] = $sessionId;
$courseInfo['status'] = $status;
$id = 'notification_'.$courseId.'_'.$sessionId.'_'.$status;
$notificationId = Session::read($id);
if ($notificationId) {
echo Display::show_notification($courseInfo, false);
Session::erase($notificationId);
}
break;
default:
echo '';
}
exit;

@ -1336,10 +1336,11 @@ class Display
* if the user never entered the course before, he will not see notification
* icons. This function takes session ID into account (if any) and only shows
* the corresponding notifications.
* @param array Course information array, containing at least elements 'db' and 'k'
* @param array $course_info Course information array, containing at least elements 'db' and 'k'
* @param bool $loadAjax
* @return string The HTML link to be shown next to the course
*/
public static function show_notification($course_info)
public static function show_notification($course_info, $loadAjax = true)
{
if (empty($course_info)) {
return '';
@ -1351,8 +1352,20 @@ class Display
$course_code = Database::escape_string($course_info['code']);
$user_id = api_get_user_id();
$course_id = intval($course_info['real_id']);
$sessionId = intval($course_info['id_session']);
$course_id = (int) $course_info['real_id'];
$sessionId = (int) $course_info['id_session'];
$status = (int) $course_info['status'];
$loadNotificationsByAjax = api_get_configuration_value('user_portal_load_notification_by_ajax');
if ($loadNotificationsByAjax) {
if ($loadAjax) {
$id = 'notification_'.$course_id.'_'.$sessionId.'_'.$status;
Session::write($id, true);
return '<span id ="'.$id.'" class="course_notification"></span>';
}
}
// Get the user's last access dates to all tools of this course
$sql = "SELECT *
@ -1429,7 +1442,7 @@ class Display
)
// Take only what's visible or "invisible but where the user is a teacher" or where the visibility is unset.
&& ($item_property['visibility'] == '1'
|| ($course_info['status'] == '1' && $item_property['visibility'] == '0')
|| ($status == '1' && $item_property['visibility'] == '0')
|| !isset($item_property['visibility']))
) {
// Also drop announcements and events that are not for the user or his group.

@ -257,3 +257,6 @@ $_configuration['system_stable'] = NEW_VERSION_STABLE;
//$_configuration['block_registered_users_access_to_open_course_contents'] = false;
// Allows syncing the database with the current entity schema
//$_configuration['sync_db_with_schema'] = false;
// Load course notifications in user_portal.php using ajax
//$_configuration['user_portal_load_notification_by_ajax'] = false;

@ -39,6 +39,28 @@ $load_dirs = api_get_setting('show_documents_preview');
$displayMyCourseViewBySessionLink = api_get_setting('my_courses_view_by_session') === 'true';
$nameTools = get_lang('MyCourses');
// Load notification by ajax
$htmlHeadXtra[] = '<script>
$(function() {
$(".course_notification").each(function(index) {
var div = $(this);
var id = $(this).attr("id");
var idList = id.split("_");
var courseId = idList[1];
var sessionId = idList[2];
var status = idList[3];
$.ajax({
type: "GET",
url: "'.api_get_path(WEB_AJAX_PATH).'course_home.ajax.php?a=get_notification&course_id="+courseId+"&session_id="+sessionId+"&status="+status,
success: function(data) {
div.append(data);
}
});
});
});
</script>';
/*
Header
Include the HTTP, HTML headers plus the top banner.

Loading…
Cancel
Save