Add config "allow_user_session_collapsable" see BT#15126

Add collapsable option when showing the course list
inside a session in userportal.php
pull/2757/head^2
Julio Montoya 7 years ago
parent 421c430840
commit c1cdf0a8d3
  1. 46
      main/inc/lib/sessionmanager.lib.php
  2. 26
      main/inc/lib/usermanager.lib.php
  3. 46
      main/inc/lib/userportal.lib.php
  4. 7
      main/install/configuration.dist.php
  5. 14
      main/template/default/user_portal/classic_session.tpl
  6. 1
      main/template/default/user_portal/grid_courses_with_category.tpl
  7. 13
      main/template/default/user_portal/grid_session.tpl
  8. 22
      user_portal.php

@ -6851,8 +6851,8 @@ SQL;
*/
public static function getUserSession($userId, $sessionId)
{
$userId = intval($userId);
$sessionId = intval($sessionId);
$userId = (int) $userId;
$sessionId = (int) $sessionId;
if (empty($userId) || empty($sessionId)) {
return false;
@ -9123,6 +9123,48 @@ SQL;
return $courseIds;
}
/**
* @param int $userId
* @param int $sessionId
* @param ExtraFieldValue $extraFieldValue
* @param string $collapsableLink
*
* @return array
*/
public static function getCollapsableData($userId, $sessionId, $extraFieldValue, $collapsableLink)
{
$collapsed = 0;
// Get default collapsed value in extra field
$value = $extraFieldValue->get_values_by_handler_and_field_variable($sessionId, 'collapsed');
if (!empty($value) && isset($value['value'])) {
$collapsed = $value['value'];
}
$userRelSession = Sessionmanager::getUserSession($userId, $sessionId);
if ($userRelSession) {
if (isset($userRelSession['collapsed']) && $userRelSession['collapsed'] != '') {
$collapsed = $userRelSession['collapsed'];
}
} else {
return ['collapsed' => '', 'collapsable_link' => ''];
}
$link = $collapsableLink.'&session_id='.$sessionId.'&value=1';
$image = '<i class="fa fa-folder-open"></i>';
if ($collapsed == 1) {
$link = $collapsableLink.'&session_id='.$sessionId.'&value=0';
$image = '<i class="fa fa-folder"></i>';
}
$link = Display::url(
$image,
$link
);
return ['collapsed' => $collapsed, 'collapsable_link' => $link];
}
/**
* @param int $id
*

@ -3040,8 +3040,8 @@ class UserManager
// sessions, BT#14115) but executing a similar query twice and grouping
// the results afterwards in PHP takes about 1/1000th of the time
// (0.1s + 0.0s) for the same set of data, so we do it this way...
$dqlStudent = $dql." WHERE scu.user = :user AND url.accessUrlId = :url ";
$dqlCoach = $dql." WHERE s.generalCoach = :user AND url.accessUrlId = :url ";
$dqlStudent = $dql.' WHERE scu.user = :user AND url.accessUrlId = :url ';
$dqlCoach = $dql.' WHERE s.generalCoach = :user AND url.accessUrlId = :url ';
// Default order
$order = 'ORDER BY sc.name, s.name';
@ -3071,7 +3071,7 @@ class UserManager
if ($orderSetting == 'asc') {
// Put null values at the end
// https://stackoverflow.com/questions/12652034/how-can-i-order-by-null-in-dql
$order = " ORDER BY _isFieldNull asc, s.accessEndDate asc";
$order = ' ORDER BY _isFieldNull asc, s.accessEndDate asc';
}
break;
}
@ -3109,6 +3109,10 @@ class UserManager
$sessionData[$row['id']] = $row;
}
$collapsable = api_get_configuration_value('allow_user_session_collapsable');
$extraField = new ExtraFieldValue('session');
$collapsableLink = api_get_path(WEB_PATH).'user_portal.php?action=collapse_session';
$categories = [];
foreach ($sessionData as $row) {
$session_id = $row['id'];
@ -3170,6 +3174,7 @@ class UserManager
'date_end' => $categoryEnd,
];
$visibility = api_get_session_visibility(
$session_id,
null,
@ -3220,6 +3225,19 @@ class UserManager
}
}
$collapsed = '';
$collapsedAction = '';
if ($collapsable) {
$collapsableData = Sessionmanager::getCollapsableData(
$user_id,
$session_id,
$extraField,
$collapsableLink
);
$collapsed = $collapsableData['collapsed'];
$collapsedAction = $collapsableData['collapsable_link'];
}
$categories[$row['session_category_id']]['sessions'][] = [
'session_name' => $row['name'],
'session_id' => $row['id'],
@ -3228,6 +3246,8 @@ class UserManager
'coach_access_start_date' => $row['coach_access_start_date'] ? $row['coach_access_start_date']->format('Y-m-d H:i:s') : null,
'coach_access_end_date' => $row['coach_access_end_date'] ? $row['coach_access_end_date']->format('Y-m-d H:i:s') : null,
'courses' => $courseList,
'collapsed' => $collapsed,
'collapsable_link' => $collapsedAction,
];
}

@ -1339,15 +1339,10 @@ class IndexManager
if ($specialCourses) {
if ($categoryCodeFilter) {
$specialCourses = self::filterByCategory(
$specialCourses,
$categoryCodeFilter
);
$specialCourses = self::filterByCategory($specialCourses, $categoryCodeFilter);
}
$this->tpl->assign('courses', $specialCourses);
$specialCourseList = $this->tpl->fetch(
$this->tpl->get_template($coursesWithoutCategoryTemplate)
);
$specialCourseList = $this->tpl->fetch($this->tpl->get_template($coursesWithoutCategoryTemplate));
$courseCompleteList = array_merge($courseCompleteList, $specialCourses);
}
@ -1385,6 +1380,14 @@ class IndexManager
$sessions_with_category = '';
$sessions_with_no_category = '';
$collapsable = api_get_configuration_value('allow_user_session_collapsable');
$collapsableLink = '';
if ($collapsable) {
$collapsableLink = api_get_path(WEB_PATH).'user_portal.php?action=collapse_session';
}
$extraFieldValue = new ExtraFieldValue('session');
if ($showSessions) {
$coursesListSessionStyle = api_get_configuration_value('courses_list_session_title_link');
$coursesListSessionStyle = $coursesListSessionStyle === false ? 1 : $coursesListSessionStyle;
@ -1558,7 +1561,6 @@ class IndexManager
];
$session_box = Display::getSessionTitleBox($session_id);
$coachId = $session_box['id_coach'];
$extraFieldValue = new ExtraFieldValue('session');
$imageField = $extraFieldValue->get_values_by_handler_and_field_variable(
$session_id,
'image'
@ -1567,9 +1569,8 @@ class IndexManager
$params['category_id'] = $session_box['category_id'];
$params['title'] = $session_box['title'];
$params['id_coach'] = $coachId;
$params['coach_url'] = api_get_path(
WEB_AJAX_PATH
).'user_manager.ajax.php?a=get_user_popup&user_id='.$coachId;
$params['coach_url'] = api_get_path(WEB_AJAX_PATH).
'user_manager.ajax.php?a=get_user_popup&user_id='.$coachId;
$params['coach_name'] = !empty($session_box['coach']) ? $session_box['coach'] : null;
$params['coach_avatar'] = UserManager::getUserPicture(
$coachId,
@ -1579,6 +1580,18 @@ class IndexManager
$params['image'] = isset($imageField['value']) ? $imageField['value'] : null;
$params['duration'] = isset($session_box['duration']) ? ' '.$session_box['duration'] : null;
$params['show_actions'] = SessionManager::cantEditSession($session_id);
if ($collapsable) {
$collapsableData = Sessionmanager::getCollapsableData(
$user_id,
$session_id,
$extraFieldValue,
$collapsableLink
);
$params['collapsed'] = $collapsableData['collapsed'];
$params['collapsable_link'] = $collapsableData['collapsable_link'];
}
$params['show_description'] = $session_box['show_description'] == 1 && $portalShowDescription;
$params['description'] = $session_box['description'];
$params['visibility'] = $session_box['visibility'];
@ -1722,6 +1735,17 @@ class IndexManager
$sessionParams[0]['is_old'] = $markAsOld;
$sessionParams[0]['is_future'] = $markAsFuture;
if ($collapsable) {
$collapsableData = Sessionmanager::getCollapsableData(
$user_id,
$session_id,
$extraFieldValue,
$collapsableLink
);
$sessionParams[0]['collapsable_link'] = $collapsableData['collapsable_link'];
$sessionParams[0]['collapsed'] = $collapsableData['collapsed'];
}
if ($showSimpleSessionInfo) {
$sessionParams[0]['subtitle'] = self::getSimpleSessionDetails(
$session_box['coach'],

@ -1049,7 +1049,12 @@ VALUES (2, 13, 'session_courses_read_only_mode', 'Lock Course In Session', 1, 1,
// Add collapsable option for user course categories
// ALTER TABLE user_course_category ADD collapsed TINYINT(1) DEFAULT NULL;
// $_configuration['allow_user_course_category_collapsable'] = true;
// $_configuration['allow_user_course_category_collapsable'] = false;
// Add collapsable option when showing the course list inside a session in userportal.php
// ALTER TABLE session_rel_user ADD collapsed TINYINT(1) DEFAULT NULL;
// Create a new session extra field called "collapsed" (checkbox yes/no - option)
// $_configuration['allow_user_session_collapsable'] = false;
// ------ Custom DB changes (keep this at the end)
// Add user activation by confirmation email

@ -2,8 +2,8 @@
{% for row in session %}
<div class="panel panel-default">
{% set collapsable = '' %}
{% if not row.show_simple_session_info %}
{% set collapsable = '' %}
{% if row.course_list_session_style %} {# If not style then no show header #}
<div class="panel-heading">
{% if row.course_list_session_style == 1 or row.course_list_session_style == 2 %} {# Session link #}
@ -38,8 +38,20 @@
</a>
</div>
{% endif %}
{% if row.collapsable_link %}
<div class="pull-right">
{{ row.collapsable_link }}
</div>
{% endif %}
</div>
{% endif %}
{% if row.collapsable_link %}
{% if row.collapsed == 1 %}
{% set collapsable = 'collapse' %}
{% endif %}
{% endif %}
<div class="session panel-body {{ collapsable }}" id="collapse_{{ row.id }}">
<div class="row">
<div class="col-md-12">

@ -88,7 +88,6 @@
</div>
{% endif %}
{% endif %}
</div>
</div>
</div>

@ -120,6 +120,7 @@
{% set session_image = 'window_list.png'|img(32, row.title) %}
{% for row in session %}
{% set collapsable = '' %}
<div id="session-{{ item.id }}" class="session panel panel-default">
{% if row.course_list_session_style %} {# If not style then no show header #}
<div class="panel-heading">
@ -155,8 +156,20 @@
</a>
</div>
{% endif %}
{% if row.collapsable_link %}
<div class="pull-right">
{{ row.collapsable_link }}
</div>
{% endif %}
</div>
{% endif %}
{% if row.collapsable_link %}
{% if row.collapsed == 1 %}
{% set collapsable = 'collapse' %}
{% endif %}
{% endif %}
<div class="session panel-body {{ collapsable }}" id="collapse_{{ row.id }}">
{% if row.show_description %}
{{ row.description }}

@ -36,6 +36,28 @@ api_block_anonymous_users(); // Only users who are logged in can proceed.
$userId = api_get_user_id();
$collapsable = api_get_configuration_value('allow_user_session_collapsable');
if ($collapsable) {
$action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
$sessionId = isset($_REQUEST['session_id']) ? $_REQUEST['session_id'] : '';
$value = isset($_REQUEST['value']) ? (int) $_REQUEST['value'] : '';
switch ($action) {
case 'collapse_session':
if (!empty($sessionId)) {
$userRelSession = SessionManager::getUserSession($userId, $sessionId);
if ($userRelSession) {
$table = Database::get_main_table(TABLE_MAIN_SESSION_USER);
$sql = "UPDATE $table SET collapsed = $value WHERE id = ".$userRelSession['id'];
Database::query($sql);
Display::addFlash(Display::return_message(get_lang('Updated')));
}
header('Location: user_portal.php');
exit;
}
break;
}
}
/* Constants and CONFIGURATION parameters */
$load_dirs = api_get_setting('show_documents_preview');
$displayMyCourseViewBySessionLink = api_get_setting('my_courses_view_by_session') === 'true';

Loading…
Cancel
Save