Session catalog: Fix count BT#16232

pull/3023/head
Julio 7 years ago
parent 77275c57e4
commit e1bfd59483
  1. 5
      main/auth/courses_controller.php
  2. 17
      main/inc/lib/CoursesAndSessionsCatalog.class.php
  3. 46
      main/inc/lib/sessionmanager.lib.php

@ -357,7 +357,8 @@ class CoursesController
$date = isset($_POST['date']) ? $_POST['date'] : date('Y-m-d');
$hiddenLinks = isset($_GET['hidden_links']) ? $_GET['hidden_links'] == 1 : false;
$limit = isset($limit) ? $limit : self::getLimitArray();
$countSessions = SessionManager::countSessionsByEndDate($date);
$countSessions = CoursesAndSessionsCatalog::browseSessions($date, [], false, true);
$sessions = CoursesAndSessionsCatalog::browseSessions($date, $limit);
$pageTotal = ceil($countSessions / $limit['length']);
@ -416,7 +417,7 @@ class CoursesController
$tpl = new Template();
$tpl->assign('show_courses', CoursesAndSessionsCatalog::showCourses());
$tpl->assign('show_sessions', CoursesAndSessionsCatalog::showSessions());
$tpl->assign('show_tutor', (api_get_setting('show_session_coach') === 'true' ? true : false));
$tpl->assign('show_tutor', api_get_setting('show_session_coach') === 'true' ? true : false);
$tpl->assign('course_url', $courseUrl);
$tpl->assign('already_subscribed_label', $this->getAlreadyRegisteredInSessionLabel());
$tpl->assign('hidden_links', $hiddenLinks);

@ -561,16 +561,21 @@ class CoursesAndSessionsCatalog
* @param string $date
* @param array $limit
* @param bool $returnQueryBuilder
* @param bool $getCount
*
* @throws Exception
* @return array|\Doctrine\ORM\Query The session list
*
* @return array The session list
*/
public static function browseSessions($date = null, $limit = [], $returnQueryBuilder = false)
public static function browseSessions($date = null, $limit = [], $returnQueryBuilder = false, $getCount = false)
{
$urlId = api_get_current_access_url_id();
$dql = "SELECT s
$select = 's';
if ($getCount) {
$select = 'count(s) ';
}
$dql = "SELECT $select
FROM ChamiloCoreBundle:Session s
WHERE EXISTS
(
@ -612,6 +617,10 @@ class CoursesAndSessionsCatalog
return $qb;
}
if ($getCount) {
return $qb->getSingleScalarResult();
}
return $qb->getResult();
}

@ -4630,16 +4630,17 @@ class SessionManager
/**
* Get the number of sessions.
*
* @param int ID of the URL we want to filter on (optional)
* @param int $access_url_id ID of the URL we want to filter on (optional)
*
* @return int Number of sessions
*/
public static function count_sessions($access_url_id = null)
public static function count_sessions($access_url_id = 0)
{
$session_table = Database::get_main_table(TABLE_MAIN_SESSION);
$access_url_rel_session_table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$access_url_id = (int) $access_url_id;
$sql = "SELECT count(s.id) FROM $session_table s";
if (!empty($access_url_id) && $access_url_id == intval($access_url_id)) {
if (!empty($access_url_id)) {
$sql .= ", $access_url_rel_session_table u ".
" WHERE s.id = u.session_id AND u.access_url_id = $access_url_id";
}
@ -4649,45 +4650,6 @@ class SessionManager
return $row[0];
}
/**
* Return a COUNT from Session table.
*
* @param string $date in Y-m-d format
*
* @return int
*/
public static function countSessionsByEndDate($date = null)
{
$sessionTable = Database::get_main_table(TABLE_MAIN_SESSION);
$url = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
$date = Database::escape_string($date);
$urlId = api_get_current_access_url_id();
$dateFilter = '';
if (!empty($date)) {
$dateFilter = <<<SQL
AND (('$date' BETWEEN s.access_start_date AND s.access_end_date)
OR (s.access_end_date IS NULL)
OR (
s.access_start_date IS NULL AND
s.access_end_date IS NOT NULL AND s.access_end_date > '$date'
))
SQL;
}
$sql = "SELECT COUNT(*)
FROM $sessionTable s
INNER JOIN $url u
ON (s.id = u.session_id)
WHERE u.access_url_id = $urlId AND s.nbr_courses > 0 $dateFilter";
$res = Database::query($sql);
$count = 0;
if ($res !== false && Database::num_rows($res) > 0) {
$count = (int) current(Database::fetch_row($res));
}
return $count;
}
/**
* @param int $id
* @param bool $checkSession

Loading…
Cancel
Save