Merge branch 'AngelFQC-7275' into 1.9.x

1.9.x
Yannick Warnier 11 years ago
commit 1221633ff8
  1. 148
      main/auth/courses.php
  2. 6
      main/auth/courses_controller.php
  3. 99
      main/css/base.css
  4. 41
      main/css/chamilo/default.css
  5. BIN
      main/img/check.png
  6. BIN
      main/img/icons/128/window_list.png
  7. BIN
      main/img/icons/16/window_list.png
  8. BIN
      main/img/icons/22/window_list.png
  9. BIN
      main/img/icons/64/window_list.png
  10. 41
      main/inc/lib/course_category.lib.php
  11. 31
      main/template/default/auth/courses_categories.php
  12. 158
      main/template/default/auth/sessions_catalog.tpl

@ -27,30 +27,29 @@ require_once api_get_path(LIBRARY_PATH).'mail.lib.inc.php';
if (api_get_setting('show_courses_descriptions_in_catalog') == 'true') {
$htmlHeadXtra[] = '
<script>
$(document).ready(function() {
$(\'.ajax\').live(\'click\', function() {
var url = this.href;
var dialog = $("#dialog");
if ($("#dialog").length == 0) {
dialog = $(\'<div id="dialog" style="display:hidden"></div>\').appendTo(\'body\');
}
// load remote content
dialog.load(
url,
{},
function(responseText, textStatus, XMLHttpRequest) {
dialog.dialog({
modal : true,
width : 540,
height : 400,
});
});
//prevent the browser to follow the link
return false;
});
$(document).ready(function() {
$(\'.ajax\').live(\'click\', function() {
var url = this.href;
var dialog = $("#dialog");
if ($("#dialog").length == 0) {
dialog = $(\'<div id="dialog" style="display:hidden"></div>\').appendTo(\'body\');
}
// load remote content
dialog.load(
url,
{},
function(responseText, textStatus, XMLHttpRequest) {
dialog.dialog({
modal : true,
width : 540,
height : 400
});
});
//prevent the browser to follow the link
return false;
});
});
</script>';
}
@ -76,49 +75,34 @@ if (api_is_platform_admin() || api_is_course_admin() || api_is_allowed_to_create
}
// filter actions
$actions = array('sortmycourses', 'createcoursecategory', 'subscribe', 'deletecoursecategory', 'display_courses', 'display_random_courses', 'subscribe_user_with_password', 'display_sessions');
$action = CoursesAndSessionsCatalog::is(CATALOG_SESSIONS) ? 'display_sessions' : 'display_random_courses';
$nameTools = get_lang('SortMyCourses');
// Get Limit values
$limit = getLimitArray();
if (isset($_GET['action']) && in_array($_GET['action'],$actions)) {
$action = $_GET['action'];
}
if ($action == 'createcoursecategory') {
$nameTools = get_lang('CreateCourseCategory');
}
if ($action == 'subscribe') {
$nameTools = get_lang('CourseManagement');
}
$actions = array(
'sortmycourses',
'createcoursecategory',
'subscribe',
'deletecoursecategory',
'display_courses',
'display_random_courses',
'subscribe_user_with_password',
'display_sessions'
);
if ($action == 'subscribe_user_with_password') {
$nameTools = get_lang('CourseManagement');
}
if ($action == 'display_random_courses' || $action == 'display_courses' ) {
$nameTools = get_lang('CourseManagement');
}
if ($action == 'display_sessions') {
$nameTools = get_lang('Sessions');
$action = CoursesAndSessionsCatalog::is(CATALOG_SESSIONS) ? 'display_sessions' : 'display_random_courses';
if (isset($_GET['action']) && in_array($_GET['action'], $actions)) {
$action = Security::remove_XSS($_GET['action']);
} else {
// Nothing to do
}
// Breadcrumbs.
$interbreadcrumb[] = array('url' => api_get_path(WEB_PATH).'user_portal.php', 'name' => get_lang('MyCourses'));
$nameTools = getCourseCatalogNameTools($action);
if (empty($nameTools)) {
$nameTools = get_lang('CourseManagement');
$nameTools = get_lang('CourseManagement');
} else {
if (!in_array($action, array('sortmycourses', 'createcoursecategory', 'display_random_courses', 'display_courses', 'subscribe'))) {
$interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'auth/courses.php', 'name' => get_lang('CourseManagement'));
}
if ($action == 'createcoursecategory') {
$interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'auth/courses.php?action=sortmycourses', 'name' => get_lang('SortMyCourses'));
}
if (!in_array($action, array('sortmycourses', 'createcoursecategory', 'display_random_courses', 'display_courses', 'subscribe'))) {
$interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'auth/courses.php', 'name' => get_lang('CourseManagement'));
}
if ($action == 'createcoursecategory') {
$interbreadcrumb[] = array('url' => api_get_path(WEB_CODE_PATH).'auth/courses.php?action=sortmycourses', 'name' => get_lang('SortMyCourses'));
}
$interbreadcrumb[] = array('url' => '#', 'name' => $nameTools);
}
@ -127,16 +111,16 @@ $courses_controller = new CoursesController();
// We are moving a course or category of the user up/down the list (=Sort My Courses).
if (isset($_GET['move'])) {
if (isset($_GET['course'])) {
if ($ctok == $_GET['sec_token']) {
if (isset($_GET['course'])) {
if ($ctok == $_GET['sec_token']) {
$courses_controller->move_course($_GET['move'], $_GET['course'], $_GET['category']);
}
}
if (isset($_GET['category']) && !$_GET['course']) {
if ($ctok == $_GET['sec_token']) {
}
}
if (isset($_GET['category']) && !$_GET['course']) {
if ($ctok == $_GET['sec_token']) {
$courses_controller->move_category($_GET['move'], $_GET['category']);
}
}
}
}
}
// We are moving the course of the user to a different user defined course category (=Sort My Courses).
@ -148,24 +132,24 @@ if (isset($_POST['submit_change_course_category'])) {
// We edit course category
if (isset($_POST['submit_edit_course_category']) && isset($_POST['title_course_category']) && strlen(trim($_POST['title_course_category'])) > 0) {
if ($ctok == $_POST['sec_token']) {
$courses_controller->edit_course_category($_POST['title_course_category'], $_POST['edit_course_category']);
}
if ($ctok == $_POST['sec_token']) {
$courses_controller->edit_course_category($_POST['title_course_category'], $_POST['edit_course_category']);
}
}
// we are deleting a course category
if ($action == 'deletecoursecategory' && isset($_GET['id'])) {
if ($ctok == $_GET['sec_token']) {
$get_id_cat = intval($_GET['id']);
$courses_controller->delete_course_category($get_id_cat);
}
if ($ctok == $_GET['sec_token']) {
$get_id_cat = intval($_GET['id']);
$courses_controller->delete_course_category($get_id_cat);
}
}
// We are creating a new user defined course category (= Create Course Category).
if (isset($_POST['create_course_category']) && isset($_POST['title_course_category']) && strlen(trim($_POST['title_course_category'])) > 0) {
if ($ctok == $_POST['sec_token']) {
if ($ctok == $_POST['sec_token']) {
$courses_controller->add_course_category($_POST['title_course_category']);
}
}
}
// search courses
@ -184,17 +168,17 @@ if (isset($_REQUEST['subscribe_course'])) {
}
// We are unsubscribing from a course (=Unsubscribe from course).
if (isset($_GET['unsubscribe'])) {
if ($ctok == $_GET['sec_token']) {
if ($ctok == $_GET['sec_token']) {
$courses_controller->unsubscribe_user_from_course($_GET['unsubscribe'], $_GET['search_term'], $_GET['category_code']);
//$message = remove_user_from_course($_user['user_id'], $_POST['unsubscribe']);
}
}
}
// We are unsubscribing from a course (=Unsubscribe from course).
if (isset($_POST['unsubscribe'])) {
if ($ctok == $_POST['sec_token']) {
if ($ctok == $_POST['sec_token']) {
$courses_controller->unsubscribe_user_from_course($_POST['unsubscribe']);
//$message = remove_user_from_course($_user['user_id'], $_POST['unsubscribe']);
}
}
}
switch ($action) {

@ -89,7 +89,7 @@ class CoursesController
{
$data = array();
$browse_course_categories = $this->model->browse_course_categories();
global $_configuration;
$data['countCoursesInCategory'] = $this->model->count_courses_in_category($category_code);
@ -491,7 +491,7 @@ class CoursesController
$url = api_get_path(WEB_PATH) . "main/inc/email_editor.php?action=subscribe_me_to_session&session=$sessionName";
return Display::url(get_lang('Subscribe'), $url, array(
'class' => 'btn btn-primary',
'class' => 'btn btn-large btn-primary',
));
}
@ -513,7 +513,7 @@ class CoursesController
*/
public function getSessionIcon($sessionName)
{
return Display::return_icon('window_list.png', $sessionName, null, ICON_SIZE_LARGE);
return Display::return_icon('window_list.png', $sessionName, null, ICON_SIZE_BIG);
}
/**

@ -61,56 +61,56 @@ header #logo img{
padding-bottom: 5px;
color: #006699;
}
.items-progress {
.thematic-postit .items-progress {
border-top: 2px solid #C4DDEB;
padding: 5px;
margin-top: 0px;
background-color: #ECF4F8;
}
.items-progress.current {
.thematic-postit .items-progress.current {
border-top: 2px solid #C4DDEB;
padding: 5px;
margin-top: 0px;
background-color: #C4DDEB;
}
.items-progress .date{
.thematic-postit .items-progress .date{
color: #666;
font-size: 11px;
display: block;
}
.items-progress .title{
.thematic-postit .items-progress .title{
font-size: 14px;
line-height: 18px;
display: block;
}
.items-progress .time{
.thematic-postit .items-progress .time{
display: block;
padding-top: 5px;
}
.info-progress{
.thematic-postit .info-progress{
padding: 10px;
}
.score-thematic .score{
.thematic-postit .score-thematic .score{
text-align: right;
}
.score-thematic .name-student{
.thematic-postit .score-thematic .name-student{
font-weight: bold;
font-size: 16px;
padding-left: 70px;
margin: 0px;
}
.score-thematic{
.thematic-postit .score-thematic{
color: #666;
}
.score-thematic p{
.thematic-postit .score-thematic p{
padding: 0px;
margin: 0px;
}
.row-fluid.score-thematic {
.thematic-postit .row-fluid.score-thematic {
padding-top: 5px;
}
.accordion-heading .accordion-toggle {
.thematic-postit .accordion-heading .accordion-toggle {
display: inline;
padding-bottom: 3px;
padding-left: 10px;
@ -121,43 +121,100 @@ header #logo img{
margin-bottom: 10px;
margin-right: 15px;
}
.accordion-heading .title-accordion{
.thematic-postit .accordion-heading .title-accordion{
padding:0px;
background:url(thematic.png) no-repeat left bottom transparent;
}
.name-student h2{
.thematic-postit .name-student h2{
font-size: 18px;
margin: 0;
}
.accordion-heading h3, .accordion-heading h2{
.thematic-postit .accordion-heading h3, .accordion-heading h2{
line-height: 17px;
}
.accordion-group{
.thematic-postit .accordion-group{
border: 1px solid #D4E6F0;
}
.name-student h3{
.thematic-postit .name-student h3{
font-size: 13px;
font-weight: normal;
margin: 0;
}
.accordion-heading {
.thematic-postit .accordion-heading {
background-color: #E7F1F7;
}
.items-progress p{
.thematic-postit .items-progress p{
margin-bottom: 3px;
}
.accordion-body.collapse {
.thematic-postit .accordion-body.collapse {
height: 0;
display: none;
}
.accordion-body.collapse.in {
.thematic-postit .accordion-body.collapse.in {
height: auto;
display: block;
}
/* END COURSE PROGRESS*/
/* SESSION CATALOG*/
.session-group .padding-clear{
padding-top: 5px;
padding-bottom: 10px;
}
/*.session-group .thumbnail{
border: none;
box-shadow: none;
}*/
.session-group .border-info{
/*border-bottom: 1px solid #ccc;*/
padding-bottom: 5px;
}
.session-group .buttom-subscribed{
padding-top: .5em;
padding-bottom: .5em;
}
.session-group .time{
font-size: 12px;
}
.session-group .accordion-heading{
background-color: #D2E7F3;
}
.session-group .accordion-group{
border: 1px solid #B7D7EF;
}
.session-group .accordion-inner{
border-top: 1px solid #B7D7EF;
background-color: #FFFFFF;
}
.buttom-subscribed .btn{
display: block;
}
.session-group .items-session{
list-style: none;
padding: 0;
margin: 0;
}
.session-group .items-session li{
padding-bottom: 5px;
}
.well .nav.nav-list > li{
padding-top: 8px;
padding-bottom: 8px;
}
.well .nav-list > li > a {
font-size: 13px;
padding-bottom: 0;
padding-top: 0;
}
.well .form-search .input-append .search-session{
width: 130px;
}
/* SESSION CATALOG END*/
.subnav .brand {
display:none;
}

@ -127,9 +127,8 @@ a.thumbnail:hover{
text-shadow: none;
}
.breadcrumb a.btn-mini{
line-height: 17px;
line-height: 22px;
text-transform: none;
margin-top: 5px;
}
.breadcrumb a.btn-mini > .btn-success{
color: #FFFFFF;
@ -428,10 +427,14 @@ a.thumbnail:hover{
}
.breadcrumb {
margin-bottom: 0;
background-image: none;
background-color: #e7f1f7;
padding-top: 0;
padding-bottom: 0;
background: rgb(255,255,255); /* Old browsers */
background: -moz-linear-gradient(top, rgba(255,255,255,1) 0%, rgba(192,219,234,1) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(255,255,255,1)), color-stop(100%,rgba(192,219,234,1))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(192,219,234,1) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(192,219,234,1) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgba(255,255,255,1) 0%,rgba(192,219,234,1) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgba(255,255,255,1) 0%,rgba(192,219,234,1) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#c0dbea',GradientType=0 ); /* IE6-9 */
margin-top: 5px;
border: 1px solid #d4e6f0;
box-shadow: none;
@ -584,15 +587,6 @@ a.thumbnail:hover{
padding-bottom: 5px;
}
.well {
background-color: rgba(96,165,209, 0.1);
border: 1px solid rgba(96,165,209, 0.1);
border-radius: 8px;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05) inset;
margin-bottom: 20px;
min-height: 20px;
padding: 20px 10px;
}
.sidebar-nav img{
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
@ -627,22 +621,7 @@ a.thumbnail:hover{
.page-header {
border:none;
}
.well_border{
background-color: rgba(96,165,209, 0.1);
border: 1px solid rgba(96,165,209, 0.1);
border-radius: 8px;
box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05) inset;
margin-bottom: 20px;
min-height: 20px;
padding: 19px;
}
.well_border .row .span2 {
width: 98px;
}
.well_border .row .span2 .thumbnail {
background-color: #FFFFFF;
background-image: none;
}
#hot_courses .row .span9 .well_border .row .span6{
width: auto;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 997 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

@ -848,7 +848,6 @@ function searchCategoryById($list)
}
/**
* Return an array with pagination data: 'start', 'current', 'length'
* @return array
*/
function getLimitArray()
@ -1031,6 +1030,46 @@ function getPageNumberItem($pageNumber, $pageLength, $liAttributes = array(), $c
$liAttributes
);
}
/**
* Return the name tool by action
* @param string $action
* @return string
*/
function getCourseCatalogNameTools($action)
{
$nameTools = get_lang('SortMyCourses');
if (empty($action)) {
return $nameTools; //should never happen
}
switch ($action) {
case 'createcoursecategory' :
$nameTools = get_lang('CreateCourseCategory');
break;
case 'subscribe' :
$nameTools = get_lang('CourseManagement');
break;
case 'subscribe_user_with_password' :
$nameTools = get_lang('CourseManagement');
break;
case 'display_random_courses' :
// No break
case 'display_courses' :
$nameTools = get_lang('CourseManagement');
break;
case 'display_sessions' :
$nameTools = get_lang('Sessions');
break;
default :
// Nothing to do
break;
}
return $nameTools;
}
/**
CREATE TABLE IF NOT EXISTS access_url_rel_course_category (access_url_id int unsigned NOT NULL, course_category_id int unsigned NOT NULL, PRIMARY KEY (access_url_id, course_category_id));
*/

@ -127,7 +127,7 @@ $userInfo = api_get_user_info();
</div>
</fieldset>
</form>
<?php
<?php
$hidden_links = 0;
} else {
$hidden_links = 1;
@ -139,7 +139,12 @@ $userInfo = api_get_user_info();
*/
if (!empty($browse_course_categories)) {
//echo '<a class="btn" href="'.api_get_self().'?action=display_random_courses">'.get_lang('RandomPick').'</a><br /><br />';
?>
</ul>
</div>
<div class="well">
<ul class="nav nav-list">
<?php
echo '<li class="nav-header">'.get_lang('CourseCategories').'</li>';
$action = 'display_courses';
@ -232,15 +237,20 @@ $userInfo = api_get_user_info();
}
}
}
}
} ?>
</ul>
</div>
<?php
}
}
?>
<?php } ?>
<?php if ($showSessions) { ?>
<?php if ($showSessions) { ?>
<div class="well">
<ul class="nav nav-list">
<li class="nav-header"><?php echo get_lang('Sessions'); ?></li>
<li>
<?php if ($action == 'display_sessions' && $_SERVER['REQUEST_METHOD'] != 'POST') { ?>
<strong><?php echo get_lang('SessionList'); ?></strong>
<strong><?php echo get_lang('Sessions'); ?></strong>
<?php } else { ?>
<a href="<?php echo getCourseCategoryUrl(1, $pageLength, null, 0, 'display_sessions'); ?>"><?php echo get_lang('SessionList'); ?></a>
<?php } ?>
@ -256,14 +266,15 @@ $userInfo = api_get_user_info();
<button class="btn" type="submit"><?php echo get_lang('Search'); ?></button>
</div>
</form>
<?php } ?>
</ul>
</div>
<?php } ?>
</div>
<div class="span9">
<?php
echo $cataloguePagination;
?>
<div class="page-header">
<h2><?php echo get_lang('CourseCatalog')?></h2>
</div>
<?php if ($showCourses && $action != 'display_sessions') { ?>
<?php if (!empty($message)) { Display::display_confirmation_message($message, false); }
if (!empty($error)) { Display::display_error_message($error, false); }

@ -8,37 +8,44 @@
});
$('.accordion').on('show', function(e) {
e.preventDefault();
var $target = $(e.target);
var $targetContent = $target.find('.accordion-inner');
$targetContent.empty();
var idParts = $target.attr('id').split('-');
var sessionId = parseInt(idParts[1], 10);
$.ajax('{{ web_session_courses_ajax_url }}', {
data: {
a: 'display_sessions_courses',
session: sessionId
},
dataType: 'json',
success: function(response) {
var coursesUL = '';
$.each(response, function(index, course) {
coursesUL += '<li><strong>' + course.name + '</strong>';
if (course.coachName != '') {
coursesUL += ' (' + course.coachName + ')';
}
coursesUL += '</li>';
});
$targetContent.html('<ul>' + coursesUL + '</ul>');
}
});
if ($targetContent.is(':empty')) {
var idParts = $target.attr('id').split('-');
var sessionId = parseInt(idParts[1], 10);
$.ajax('{{ web_session_courses_ajax_url }}', {
data: {
a: 'display_sessions_courses',
session: sessionId
},
dataType: 'json',
success: function(response) {
var coursesUL = '';
$.each(response, function(index, course) {
coursesUL += '<li><img src="{{ _p.web }}/main/img/check.png"/> <strong>' + course.name + '</strong>';
if (course.coachName != '') {
coursesUL += ' (' + course.coachName + ')';
}
coursesUL += '</li>';
});
$targetContent.html('<ul class="items-session">' + coursesUL + '</ul>');
$target.css({
height: $targetContent.outerHeight()
}).addClass('in');
}
});
} else {
$target.addClass('in');
}
});
});
</script>
@ -69,10 +76,9 @@
</div>
{% if coursesCategoriesList is not empty %}
<div class="well">
<div class="well sidebar-nav">
<h4>{{ 'CourseCategories' | get_lang }}</h4>
<ul class="nav nav-list">
<li class="nav-header">{{ 'CourseCategories' | get_lang }}</li>
{{ coursesCategoriesList }}
</ul>
</div>
@ -80,68 +86,66 @@
{% endif %}
{% if showSessions %}
<div class="well">
<div class="well sidebar-nav">
<h4>{{ 'Sessions' | get_lang }}</h4>
<ul class="nav nav-list">
<li class="nav-header">{{ 'Sessions' | get_lang }}</li>
<li>{{ 'SearchSessions' | get_lang }}</li>
<li>
<strong>{{ nameTools }}</strong>
</li>
<li class="nav-header">{{ 'SearchSessions' | get_lang }}</li>
</ul>
<form class="form-search" method="post" action="{{ sessionUrl }}">
<form class="form-search" method="post" action="{{ api_get_self }}?action=display_sessions">
<div class="input-append">
<input type="date" name="date" id="date" class="span2" value="{{ searchDate }}" readonly>
<input type="date" name="date" id="date" class="span2 search-session" value="{{ searchDate }}" readonly>
<button class="btn" type="submit">{{ 'Search' | get_lang }}</button>
</div>
</form>
</form></li>
</ul>
</div>
{% endif %}
</div>
<div class="span9">
<div class="page-header">
<h2>{{ nameTools }}</h2>
</div>
{{ cataloguePagination }}
{% for session in sessions_blocks %}
<div class="well" id="session-{{ session.id }}">
<div class="row">
<div class="span6">
<div class="row">
<div class="span1">
<span class="thumbnail">
{{ session.icon }}
</span>
{% for session in sessions_blocks %}
<div class="well well-small session-group" id="session-{{ session.id }}">
<div class="row-fluid">
<div class="span9">
<div class="row-fluid padding-clear">
<div class="span2">
<span class="thumbnail">
{{ session.icon }}
</span>
</div>
<div class="span10 border-info">
<h3>{{ session.name }}</h3>
<div class="tutor"><img src="{{ _p.web }}/main/img/teachers.gif" width="16px"> {{ 'GeneralCoach' | get_lang }} {{ session.coach_name }}</div>
</div>
</div>
<div class="span5">
<h3>{{ session.name }}</h3>
<p>{{ session.coach_name }}</p>
<div class="row-fluid">
<div class="accordion" id="session-{{ session.id }}-accordion">
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#session-{{ session.id }}-accordion" href="#session-{{ session.id }}-courses">
{{ 'CourseList' | get_lang }}
</a>
</div>
<div id="session-{{ session.id }}-courses" class="accordion-body collapse in">
<div class="accordion-inner"></div>
</div>
</div>
</div>
</div>
</div>
<br>
<div class="accordion" id="session-{{ session.id }}-accordion" style="margin-bottom: 0px;">
<div class="accordion-group">
<div class="accordion-heading">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#session-{{ session.id }}-accordion" href="#session-{{ session.id }}-courses">
{{ 'CourseList' | get_lang }}
</a>
</div>
<div id="session-{{ session.id }}-courses" class="accordion-body collapse in">
<div class="accordion-inner"></div>
</div>
<div class="span3">
<div class="buttom-subscribed">
{% if session.is_subscribed %}
{{ already_subscribed_label }}
{% else %}
{{ session.subscribe_button }}
{% endif %}
</div>
<div class="time"><img src="{{ _p.web }}/main/img/agenda.gif"> {{ session.date }}</div>
</div>
</div>
<div class="span2">
<p class="lead">{{ session.date }}</p>
{% if session.is_subscribed %}
{{ already_subscribed_label }}
{% else %}
{{ session.subscribe_button }}
{% endif %}
</div>
</div>
</div>
{% endfor %}
{{ cataloguePagination }}
</div>

Loading…
Cancel
Save