From 09edcc721772bf8342675fe9503ca5683ec6ef8c Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 21 Jul 2015 09:06:33 +0200 Subject: [PATCH 1/5] allowfullscreen in iframes see BT#9398 --- main/template/default/learnpath/view.tpl | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/template/default/learnpath/view.tpl b/main/template/default/learnpath/view.tpl index 6eb19b7562..c713637e5f 100644 --- a/main/template/default/learnpath/view.tpl +++ b/main/template/default/learnpath/view.tpl @@ -89,9 +89,9 @@ {# right zone #}
{% if oLP.mode == 'fullscreen' %} - + {% else %} - + {% endif %}
{# end right Zone #} From 32a448ff3c7be68c8afc89a949c529ceef2e2ed0 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 21 Jul 2015 11:21:40 +0200 Subject: [PATCH 2/5] Fix group overview. --- main/inc/lib/groupmanager.lib.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/main/inc/lib/groupmanager.lib.php b/main/inc/lib/groupmanager.lib.php index ff93f341b1..f6e31994e6 100755 --- a/main/inc/lib/groupmanager.lib.php +++ b/main/inc/lib/groupmanager.lib.php @@ -2752,6 +2752,10 @@ class GroupManager $groups = GroupManager::get_group_list($category['id']); } + if (empty($groups)) { + $groups = GroupManager::get_group_list(); + } + $content .= ''; @@ -2776,7 +2782,9 @@ class GroupManager $content .= "
  • ".Display::tag('h4', get_lang('Students'))."
  • '; $content .= ''; From f9122055816abd13b86b9522142c6273f0efe461 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 21 Jul 2015 13:59:38 +0200 Subject: [PATCH 3/5] replace & with & --- main/inc/lib/agenda.lib.php | 12 +++---- main/inc/lib/blog.lib.php | 70 ++++++++++++++++++------------------- 2 files changed, 41 insertions(+), 41 deletions(-) diff --git a/main/inc/lib/agenda.lib.php b/main/inc/lib/agenda.lib.php index 8c6cb58bdf..842e5d218c 100644 --- a/main/inc/lib/agenda.lib.php +++ b/main/inc/lib/agenda.lib.php @@ -2997,7 +2997,7 @@ class Agenda // if the student has specified a course we a add a link to that course if ($item['course'] <> "") { - $url = api_get_path(WEB_CODE_PATH)."calendar/agenda.php?cidReq=".urlencode($item['course'])."&day=$day&month=$month&year=$year#$day"; // RH //Patrick Cool: to highlight the relevant agenda item + $url = api_get_path(WEB_CODE_PATH)."calendar/agenda.php?cidReq=".urlencode($item['course'])."&day=$day&month=$month&year=$year#$day"; // RH //Patrick Cool: to highlight the relevant agenda item $course_link = "".$item['course'].""; } else { $course_link = ""; @@ -3008,7 +3008,7 @@ class Agenda // This is the array construction for the WEEK or MONTH view //Display events in agenda - $agendaitems[$day] .= "
    $time_minute $course_link ".$item['title']."

    "; + $agendaitems[$day] .= "
    $time_minute $course_link ".$item['title']."

    "; } else { // this is the array construction for the DAY view @@ -3018,7 +3018,7 @@ class Agenda } //Display events by list - $agendaitems[$halfhour] .= "
    $time_minute $course_link ".$item['title']."
    "; + $agendaitems[$halfhour] .= "
    $time_minute $course_link ".$item['title']."
    "; } } return $agendaitems; @@ -3057,8 +3057,8 @@ class Agenda $prev_year = ($month == 12 ? $year +1 : $year); if ($show_content) { - $back_url = Display::url($prev_icon, api_get_self()."?coursePath=".urlencode($course_path)."&courseCode=".Security::remove_XSS($g_cc)."&action=view&view=month&month=".$next_month."&year=".$next_year); - $next_url = Display::url($next_icon, api_get_self()."?coursePath=".urlencode($course_path)."&courseCode=".Security::remove_XSS($g_cc)."&action=view&view=month&month=".$prev_month."&year=".$prev_year); + $back_url = Display::url($prev_icon, api_get_self()."?coursePath=".urlencode($course_path)."&courseCode=".Security::remove_XSS($g_cc)."&action=view&view=month&month=".$next_month."&year=".$next_year); + $next_url = Display::url($next_icon, api_get_self()."?coursePath=".urlencode($course_path)."&courseCode=".Security::remove_XSS($g_cc)."&action=view&view=month&month=".$prev_month."&year=".$prev_year); } else { $back_url = Display::url($prev_icon, '', array('onclick'=>"load_calendar('".$user_id."','".$next_month."', '".$next_year."'); ")); $next_url = Display::url($next_icon, '', array('onclick'=>"load_calendar('".$user_id."','".$prev_month."', '".$prev_year."'); ")); @@ -3249,7 +3249,7 @@ class Agenda $agendaday = date("j",strtotime($item['start_date'])); $month = date("n",strtotime($item['start_date'])); $year = date("Y",strtotime($item['start_date'])); - $URL = api_get_path(WEB_PATH)."main/calendar/agenda.php?cidReq=".urlencode($course["code"])."&day=$agendaday&month=$month&year=$year#$agendaday"; + $URL = api_get_path(WEB_PATH)."main/calendar/agenda.php?cidReq=".urlencode($course["code"])."&day=$agendaday&month=$month&year=$year#$agendaday"; list($year,$month,$day,$hour,$min,$sec) = split('[-: ]',$item['start_date']); $start_date = $year.$month.$day.$hour.$min; list($year,$month,$day,$hour,$min,$sec) = split('[-: ]',$item['end_date']); diff --git a/main/inc/lib/blog.lib.php b/main/inc/lib/blog.lib.php index 2e79f39e9e..46bca8ad2a 100755 --- a/main/inc/lib/blog.lib.php +++ b/main/inc/lib/blog.lib.php @@ -757,7 +757,7 @@ class Blog if (Database::num_rows($result) > 0) { echo '
      '; while ($mytask = Database::fetch_array($result)) { - echo '
    • '.stripslashes($mytask['title']) . '
    • '; + echo '
    • '.stripslashes($mytask['title']) . '
    • '; } echo '
        '; } else { @@ -873,8 +873,8 @@ class Blog $introduction_text = stripslashes($introduction_text); echo '
        '; - echo ''.stripslashes($blog_post['title']) . ''; - echo '' . $blog_post_date . ''; + echo ''.stripslashes($blog_post['title']) . ''; + echo '' . $blog_post_date . ''; echo '
        ' . $introduction_text.$readMoreLink.'
        '; echo ''; @@ -889,7 +889,7 @@ class Blog echo ''; } $username = api_htmlentities(sprintf(get_lang('LoginX'), $blog_post['username']), ENT_QUOTES); - echo '' . get_lang('Author') . ': ' . Display::tag('span', api_get_person_name($blog_post['firstname'], $blog_post['lastname']), array('title'=>$username)) .' - ' . get_lang('Comments') . ': ' . $blog_post_comments['number_of_comments'] . ''; + echo '' . get_lang('Author') . ': ' . Display::tag('span', api_get_person_name($blog_post['firstname'], $blog_post['lastname']), array('title'=>$username)) .' - ' . get_lang('Comments') . ': ' . $blog_post_comments['number_of_comments'] . ''; echo '
        '; } } else { @@ -987,10 +987,10 @@ class Blog $task_id = (isset($_GET['task_id']) && is_numeric($_GET['task_id'])) ? intval($_GET['task_id']) : 0; if (api_is_allowed('BLOG_' . $blog_id, 'article_edit', $task_id)) - $blog_post_actions .= ''; + $blog_post_actions .= ''; if (api_is_allowed('BLOG_' . $blog_id, 'article_delete', $task_id)) - $blog_post_actions .= ''; + $blog_post_actions .= ''; if(api_is_allowed('BLOG_' . $blog_id, 'article_rate')) $rating_select = Blog::display_rating_form('post',$blog_id,$post_id); @@ -999,7 +999,7 @@ class Blog // Display post echo '
        '; - echo ''.stripslashes($blog_post['title']) . ''; + echo ''.stripslashes($blog_post['title']) . ''; echo '' . $blog_post_date . ''; echo '' . $blog_post_text . '
        '; @@ -1206,7 +1206,7 @@ class Blog $comment_text = make_clickable(stripslashes($comment['comment'])); $blog_comment_date = api_convert_and_format_date($comment['date_creation'], null, date_default_timezone_get()); $blog_comment_actions = ""; - if(api_is_allowed('BLOG_' . $blog_id, 'article_comments_delete', $task_id)) { $blog_comment_actions .= ''; } + if(api_is_allowed('BLOG_' . $blog_id, 'article_comments_delete', $task_id)) { $blog_comment_actions .= ''; } if(api_is_allowed('BLOG_' . $blog_id, 'article_comments_rate')) { $rating_select = Blog::display_rating_form('comment', $blog_id, $post_id, $comment['comment_id']); } if (!is_null($comment['task_id'])) { @@ -1349,10 +1349,10 @@ class Blog global $color2; echo '
        '; - echo ''.get_lang('AddTasks').'' . get_lang('AddTasks') . ' '; - echo ''.get_lang('AssignTasks').'' . get_lang('AssignTasks') . ''; + echo ''.get_lang('AddTasks').'' . get_lang('AddTasks') . ' '; + echo ''.get_lang('AssignTasks').'' . get_lang('AssignTasks') . ''; ?> - + '; @@ -1385,7 +1385,7 @@ class Blog $css_class = (($counter % 2) == 0) ? "row_odd" : "row_even"; $delete_icon = ($task['system_task'] == '1') ? "delete_na.gif" : "delete.gif"; $delete_title = ($task['system_task'] == '1') ? get_lang('DeleteSystemTask') : get_lang('DeleteTask'); - $delete_link = ($task['system_task'] == '1') ? '#' : api_get_self() . '?action=manage_tasks&blog_id=' . $task['blog_id'] . '&do=delete&task_id=' . $task['task_id']; + $delete_link = ($task['system_task'] == '1') ? '#' : api_get_self() . '?action=manage_tasks&blog_id=' . $task['blog_id'] . '&do=delete&task_id=' . $task['task_id']; $delete_confirm = ($task['system_task'] == '1') ? '' : 'onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang("ConfirmYourChoice"),ENT_QUOTES,$charset)). '\')) return false;"'; echo '', @@ -1393,7 +1393,7 @@ class Blog '' . Security::remove_XSS($task['description']) . '', '                 ', '', - '', + '', '', "\n", ''.stripslashes($assignment['description']) . '', '' . $assignment['target_date'] . '', '', - '', + '', '', "\n", - '', "\n", @@ -1500,7 +1500,7 @@ class Blog ); // form - echo '
        '; + echo ''; // form title echo ''.get_lang('AddTask').''; @@ -1598,7 +1598,7 @@ class Blog $task = Database::fetch_array($result); // Display - echo ' + echo ' ' . get_lang('EditTask') . ' @@ -1922,7 +1922,7 @@ class Blog if (Database::num_rows($result) > 0) { while($blog_post = Database::fetch_array($result)) { $username = api_htmlentities(sprintf(get_lang('LoginX'), $blog_post['username']), ENT_QUOTES); - echo ''.stripslashes($blog_post['title']) . ', ' . get_lang('WrittenBy') . ' ' . stripslashes(Display::tag('span', api_get_person_name($blog_post['firstname'], $blog_post['lastname']), array('title'=>$username))) . '
        '; + echo ''.stripslashes($blog_post['title']) . ', ' . get_lang('WrittenBy') . ' ' . stripslashes(Display::tag('span', api_get_person_name($blog_post['firstname'], $blog_post['lastname']), array('title'=>$username))) . '
        '; } } else { echo get_lang('NoArticles'); @@ -2072,7 +2072,7 @@ class Blog //Link to register users if ($a_infosUser["user_id"] != $_SESSION['_user']['user_id']){ - $row[] = "" . get_lang('Register').""; + $row[] = "" . get_lang('Register').""; } else { $row[] = ''; } @@ -2083,11 +2083,11 @@ class Blog // Display $query_vars['action'] = 'manage_members'; $query_vars['blog_id'] = $blog_id; - echo ''; + echo ''; Display::display_sortable_table($column_header, $user_data,null,null,$query_vars); $link = ''; - $link .= isset ($_GET['action']) ? 'action=' . Security::remove_XSS($_GET['action']) . '&' : ''; - $link .= "blog_id=$blog_id&"; + $link .= isset ($_GET['action']) ? 'action=' . Security::remove_XSS($_GET['action']) . '&' : ''; + $link .= "blog_id=$blog_id&"; echo '' . get_lang('SelectAll') . ' - '; echo '' . get_lang('UnSelectAll') . ' '; @@ -2181,7 +2181,7 @@ class Blog //Link to register users if ($myrow["user_id"] != $_user['user_id']) { - $row[] = "" . get_lang('UnRegister').""; + $row[] = "" . get_lang('UnRegister').""; } else { $row[] = ''; } @@ -2191,11 +2191,11 @@ class Blog $query_vars['action'] = 'manage_members'; $query_vars['blog_id'] = $blog_id; - echo ''; + echo ''; Display::display_sortable_table($column_header, $user_data,null,null,$query_vars); $link = ''; - $link .= isset ($_GET['action']) ? 'action=' . Security::remove_XSS($_GET['action']). '&' : ''; - $link .= "blog_id=$blog_id&"; + $link .= isset ($_GET['action']) ? 'action=' . Security::remove_XSS($_GET['action']). '&' : ''; + $link .= "blog_id=$blog_id&"; echo '' . get_lang('SelectAll') . ' - '; echo '' . get_lang('UnSelectAll') . ' '; @@ -2318,8 +2318,8 @@ class Blog $startdayofweek = $dayone['wday'] <> 0 ? ($dayone['wday'] - 1) : 6; $blogId = isset($_GET['blog_id']) ? intval($_GET['blog_id']) : null; $filter = isset($_GET['filter']) ? Security::remove_XSS($_GET['filter']) : null; - $backwardsURL = api_get_self()."?blog_id=" . $blogId."&filter=" . $filter."&month=". ($month == 1 ? 12 : $month -1)."&year=". ($month == 1 ? $year -1 : $year); - $forewardsURL = api_get_self()."?blog_id=" . $blogId."&filter=" . $filter."&month=". ($month == 12 ? 1 : $month +1)."&year=". ($month == 12 ? $year +1 : $year); + $backwardsURL = api_get_self()."?blog_id=" . $blogId."&filter=" . $filter."&month=". ($month == 1 ? 12 : $month -1)."&year=". ($month == 1 ? $year -1 : $year); + $forewardsURL = api_get_self()."?blog_id=" . $blogId."&filter=" . $filter."&month=". ($month == 12 ? 1 : $month +1)."&year=". ($month == 12 ? $year +1 : $year); // Get posts for this month $sql = "SELECT post.*, DAYOFMONTH(date_creation) as post_day, user.lastname, user.firstname @@ -2405,7 +2405,7 @@ class Blog // If there are posts on this day, create a filter link. if(in_array($curday, $posts)) - echo '' . $curday . ''; + echo '' . $curday . ''; else echo $dayheader; @@ -2413,7 +2413,7 @@ class Blog if (isset($tasks[$curday]) && is_array($tasks[$curday])) { // Add tasks to calendar foreach ($tasks[$curday] as $task) { - echo ' + echo ' Task'; } } @@ -2523,7 +2523,7 @@ class Blog // Validation when belongs to a session $session_img = api_get_session_image($info_log[4], $_user['status']); - $url_start_blog = 'blog.php' ."?". "blog_id=".$info_log[3]. "&".api_get_cidreq(); + $url_start_blog = 'blog.php' ."?". "blog_id=".$info_log[3]. "&".api_get_cidreq(); $title = $info_log[0]; $image = '' . $title . ''; $list_name = '' .$title. '' . $session_img; @@ -2533,14 +2533,14 @@ class Blog $visibility_icon=($info_log[2]==0) ? 'invisible' : 'visible'; $visibility_info=($info_log[2]==0) ? 'Visible' : 'Invisible'; - $my_image = ''; + $my_image = ''; $my_image.= ''; $my_image.= "\n"; - $my_image.= ''; $my_image.= ''; $my_image.= "\n"; - $my_image.= ''; + $my_image.= ''; $my_image.= ''; $my_image.= "\n"; From 27105de8d4d5bf7f8a3377fef49155148cf0e371 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 21 Jul 2015 14:00:32 +0200 Subject: [PATCH 4/5] Add group report see BT#5758 --- main/forum/reply.php | 71 ++++++++--- main/img/icons/32/group_na.png | Bin 0 -> 1154 bytes main/inc/ajax/model.ajax.php | 22 +++- main/inc/lib/course.lib.php | 43 ++++--- main/inc/lib/groupmanager.lib.php | 18 +-- main/inc/lib/tracking.lib.php | 170 ++++++++++++++++++++++--- main/tracking/courseLog.php | 4 + main/tracking/course_log_groups.php | 127 ++++++++++++++++++ main/tracking/course_log_resources.php | 5 + main/tracking/course_log_tools.php | 131 ++++++++++++++----- 10 files changed, 498 insertions(+), 93 deletions(-) create mode 100644 main/img/icons/32/group_na.png create mode 100644 main/tracking/course_log_groups.php diff --git a/main/forum/reply.php b/main/forum/reply.php index 40c0341ab5..473cfde914 100755 --- a/main/forum/reply.php +++ b/main/forum/reply.php @@ -67,7 +67,11 @@ if (!$_user['user_id'] AND $current_forum['allow_anonymous'] == 0) { } if ($current_forum['forum_of_group'] != 0) { - $show_forum = GroupManager::user_has_access(api_get_user_id(), $current_forum['forum_of_group'], GroupManager::GROUP_TOOL_FORUM); + $show_forum = GroupManager::user_has_access( + api_get_user_id(), + $current_forum['forum_of_group'], + GroupManager::GROUP_TOOL_FORUM + ); if (!$show_forum) { api_not_allowed(); } @@ -90,25 +94,52 @@ if (!empty($gradebook) && $gradebook == 'view') { if ($origin == 'group') { $_clean['toolgroup'] = (int)$_SESSION['toolgroup']; $group_properties = GroupManager :: get_group_properties($_clean['toolgroup']); - $interbreadcrumb[] = array('url' => '../group/group.php', 'name' => get_lang('Groups')); - $interbreadcrumb[] = array('url' => '../group/group_space.php?gidReq='.$_SESSION['toolgroup'], 'name' => get_lang('GroupSpace').' '.$group_properties['name']); - $interbreadcrumb[] = array('url' => 'viewforum.php?origin='.$origin.'&forum='.Security::remove_XSS($_GET['forum']), 'name' => $current_forum['forum_title']); - $interbreadcrumb[] = array('url' => 'viewthread.php?origin='.$origin.'&gradebook='.$gradebook.'&forum='.Security::remove_XSS($_GET['forum']).'&thread='.Security::remove_XSS($_GET['thread']), 'name' => $current_thread['thread_title']); - $interbreadcrumb[] = array('url' => 'javascript: void(0);', 'name' => get_lang('Reply')); + $interbreadcrumb[] = array( + 'url' => '../group/group.php?'.api_get_cidreq(), + 'name' => get_lang('Groups'), + ); + $interbreadcrumb[] = array( + 'url' => '../group/group_space.php?'.api_get_cidreq(), + 'name' => get_lang('GroupSpace').' '.$group_properties['name'], + ); + $interbreadcrumb[] = array( + 'url' => 'viewforum.php?origin='.$origin.'&forum='.intval($_GET['forum']).'&'.api_get_cidreq(), + 'name' => $current_forum['forum_title'], + ); + $interbreadcrumb[] = array( + 'url' => 'viewthread.php?origin='.$origin.'&gradebook='.$gradebook.'&forum='.intval($_GET['forum']).'&thread='.intval($_GET['thread']).'&'.api_get_cidreq(), + 'name' => $current_thread['thread_title'], + ); + $interbreadcrumb[] = array( + 'url' => 'javascript: void(0);', + 'name' => get_lang('Reply'), + ); } else { - $interbreadcrumb[] = array('url' => 'index.php?gradebook='.$gradebook, 'name' => $nameTools); - $interbreadcrumb[] = array('url' => 'viewforumcategory.php?forumcategory='.$current_forum_category['cat_id'], 'name' => $current_forum_category['cat_title']); - $interbreadcrumb[] = array('url' => 'viewforum.php?origin='.$origin.'&forum='.Security::remove_XSS($_GET['forum']), 'name' => $current_forum['forum_title']); - $interbreadcrumb[] = array('url' => 'viewthread.php?origin='.$origin.'&gradebook='.$gradebook.'&forum='.Security::remove_XSS($_GET['forum']).'&thread='.Security::remove_XSS($_GET['thread']), 'name' => $current_thread['thread_title']); + $interbreadcrumb[] = array( + 'url' => 'index.php?gradebook='.$gradebook, + 'name' => $nameTools, + ); + $interbreadcrumb[] = array( + 'url' => 'viewforumcategory.php?forumcategory='.$current_forum_category['cat_id'].'&'.api_get_cidreq(), + 'name' => $current_forum_category['cat_title'], + ); + $interbreadcrumb[] = array( + 'url' => 'viewforum.php?origin='.$origin.'&forum='.intval($_GET['forum']).'&'.api_get_cidreq(), + 'name' => $current_forum['forum_title'], + ); + $interbreadcrumb[] = array( + 'url' => 'viewthread.php?origin='.$origin.'&gradebook='.$gradebook.'&forum='.intval($_GET['forum']).'&thread='.intval($_GET['thread']).'&'.api_get_cidreq(), + 'name' => $current_thread['thread_title'], + ); $interbreadcrumb[] = array('url' => '#', 'name' => get_lang('Reply')); } /* Resource Linker */ -if (isset($_POST['add_resources']) AND $_POST['add_resources'] == get_lang('Resources')) { - $_SESSION['formelements'] = $_POST; - $_SESSION['origin'] = $_SERVER['REQUEST_URI']; - $_SESSION['breadcrumbs'] = $interbreadcrumb; +if (isset($_POST['add_resources']) && $_POST['add_resources'] == get_lang('Resources')) { + $_SESSION['formelements'] = $_POST; + $_SESSION['origin'] = $_SERVER['REQUEST_URI']; + $_SESSION['breadcrumbs'] = $interbreadcrumb; header('Location: ../resourcelinker/resourcelinker.php'); exit; } @@ -151,7 +182,9 @@ if ($origin != 'learnpath') { } /*New display forum div*/ echo '
        '; -echo '

        '.prepare4display($current_forum['forum_title']).'

        '; +echo '

        '. + prepare4display($current_forum['forum_title']).'

        '; echo '

        '.prepare4display($current_forum['forum_comment']).'

        '; echo '
        '; /* End new display forum */ @@ -159,7 +192,13 @@ echo ''; $my_action = isset($_GET['action']) ? Security::remove_XSS($_GET['action']) : ''; $my_post = isset($_GET['post']) ? Security::remove_XSS($_GET['post']) : ''; $my_elements = isset($_SESSION['formelements']) ? $_SESSION['formelements'] : ''; -$values = show_add_post_form($current_forum, $forum_setting, $my_action, $my_post, $my_elements); +$values = show_add_post_form( + $current_forum, + $forum_setting, + $my_action, + $my_post, + $my_elements +); if (!empty($values) AND isset($_POST['SubmitPost'])) { $result = store_reply($current_forum, $values); //@todo split the show_add_post_form function diff --git a/main/img/icons/32/group_na.png b/main/img/icons/32/group_na.png new file mode 100644 index 0000000000000000000000000000000000000000..2ec1acdfb597a3f5491d60d702ac88711ce7a703 GIT binary patch literal 1154 zcmV-|1bzF7P)kdg00002VoOIv0RM-N z%)bBt010qNS#tmY3ljhU3ljkVnw%H_000McNliru-v<>5F$UVS=I;Oi1QSU_K~zY` z#g$!b6jd08pP8NQFYU^Vt_(_`9 zye%S*IFgox#AQeZrPYko+%)3gpd*&J0bo>yP>k1IMpJdis@N8IvhVNVeh{v(NoVGgAOP%s`Stz3 z(#T@E_z;f_x3UMgOf?D(kO1P6WtyM+NaiH$q<+ccZz}Glh7`-$&qYQ#K!|EeFp+ux zwy?OUzWFQ<&`!l`+qpu7EQ?r0En9h(YVIY*X1+jBC=?D^EG))3dXA6q@{aL|6SaB) zT5y0a53&XamoeU@k}-UW$dbjz>n1y)wc!2{QTuhF!mmg{3 zDjke7%I~CEON<129_f+4x&lCK*Y+KS7TSUSOFXVz|_zQ%MOGtYQhPsbo1}qMW0Vv+MpiimiivVF-m4Y|(6Y z>0~35gvnr{lf|P7g@;X=B+D3N%Uz*|L5GW{zXdW_WUzvF5{DEEF`2;%p6T4!qL>lx zpyDx%5a6j2W0S!m%&DY#!T{)h_5F%p_HJP*r3j$m zpm3PMz(B`9&$F|KkBg3pSB4Q-d89RdhQ*vMQ#QT`dT+bkcA5}_CaXJwnUN+V2&PyhgO01x;Mrys}2D{n4SOwCOaFSdQW zmvkUP%dKEm1jIR+%zjQLbiHz&?HkrF)GwwS9SI!b;R7BiIyjs%56clU+6_v6DD;rG zue7eZ@|L1v3ILxh)82$NF;1`F&L'. + $group_name = ''. Security::remove_XSS($this_group['name']).' '; if (!empty($user_id) && !empty($this_group['id_tutor']) && $user_id == $this_group['id_tutor']) { $group_name .= Display::label(get_lang('OneMyGroups'), 'success'); @@ -2289,9 +2289,9 @@ class GroupManager // Self-registration / unregistration if (!api_is_allowed_to_edit(false, true)) { if (self :: is_self_registration_allowed($user_id, $this_group['id'])) { - $row[] = ''.get_lang('GroupSelfRegInf').''; + $row[] = ''.get_lang('GroupSelfRegInf').''; } elseif (self :: is_self_unregistration_allowed($user_id, $this_group['id'])) { - $row[] = ''.get_lang('GroupSelfUnRegInf').''; + $row[] = ''.get_lang('GroupSelfUnRegInf').''; } else { $row[] = '-'; } @@ -2306,10 +2306,10 @@ class GroupManager Display::return_icon('edit.png', get_lang('EditGroup'),'',ICON_SIZE_SMALL).' '; if ($this_group['status'] == 1) { - $edit_actions .= '' . + $edit_actions .= '' . Display::return_icon('visible.png', get_lang('Hide'), '', ICON_SIZE_SMALL) . ' '; } else { - $edit_actions .= '' . + $edit_actions .= '' . Display::return_icon('invisible.png', get_lang('Show'), '', ICON_SIZE_SMALL) . ' '; } @@ -2319,13 +2319,13 @@ class GroupManager $edit_actions .= ''. Display::return_icon('export_excel.png', get_lang('Export'), '', ICON_SIZE_SMALL).' '; - /*$edit_actions .= ''. + /*$edit_actions .= ''. Display::return_icon('clean.png',get_lang('EmptyGroup'),'',ICON_SIZE_SMALL).' ';*/ - $edit_actions .= ''. + $edit_actions .= ''. Display::return_icon('fill.png',get_lang('FillGroup'),'',ICON_SIZE_SMALL).' '; - $edit_actions .= ''. + $edit_actions .= ''. Display::return_icon('delete.png', get_lang('Delete'),'',ICON_SIZE_SMALL).' '; $row[] = $edit_actions; diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php index 7e512a60e7..4b49ea4cce 100755 --- a/main/inc/lib/tracking.lib.php +++ b/main/inc/lib/tracking.lib.php @@ -14,6 +14,74 @@ use CpChart\Classes\pImage as pImage; */ class Tracking { + public static function get_group_reporting( + $course_id, + $group_id = null, + $type = 'all', + $start = 0, + $limit = 1000, + $sidx = 1, + $sord = 'desc', + $where_condition = array() + ) { + if (empty($course_id)) { + return null; + } + $course_info = api_get_course_info_by_id($course_id); + $table_group = Database :: get_course_table(TABLE_GROUP); + $course_id = intval($course_id); + + $select = ' * '; + if ($type == 'count') { + $select = ' count(id) as count '; + } + + $default_where = array('c_id = ? ' => array($course_id)); + + $result = Database::select($select, $table_group, array( + 'limit' => " $start, $limit", + 'where' => $default_where, + 'order' => "$sidx $sord") + ); + + if ($type == 'count') { + return $result[0]['count']; + } + + $parsed_result = array(); + if (!empty($result)) { + foreach ($result as $group) { + $users = GroupManager::get_users($group['id'], true); + + $time = 0; + $avg_student_score = 0; + $avg_student_progress = 0; + $work = 0; + $messages = 0; + + foreach ($users as $user_data) { + $time += Tracking::get_time_spent_on_the_course($user_data['user_id'], $course_info['code'], 0); + $avg_student_score += Tracking::get_avg_student_score($user_data['user_id'], $course_info['code'], array(), 0); + $avg_student_progress += Tracking::get_avg_student_progress($user_data['user_id'], $course_info['code'], array(), 0); + $work += Tracking::count_student_assignments($user_data['user_id'], $course_info['code'], 0); + $messages += Tracking::count_student_messages($user_data['user_id'], $course_info['code'], 0); + } + + $group_item = array( + 'id' => $group['id'], + 'name' => $group['name'], + 'time' => api_time_to_hms($time), + 'progress' => $avg_student_progress, + 'score' => $avg_student_score, + 'works' => $work, + 'messages' => $messages, + ); + $parsed_result[] = $group_item; + } + } + return $parsed_result; + } + /** * @param int $user_id * @param array $courseInfo @@ -3245,6 +3313,7 @@ class Tracking $rs = Database::query($sql); $row = Database::fetch_array($rs, 'ASSOC'); $count = $row['count']; + return $count; } @@ -3254,32 +3323,46 @@ class Tracking * @param int Session id (optional), if param $session_id is * null(default) it'll return results including sessions, * 0 = session is not filtered + * @param int $groupId * @return int The number of post by course */ - public static function count_number_of_posts_by_course($course_code, $session_id = null) + public static function count_number_of_posts_by_course($course_code, $session_id = null, $groupId = 0) { - $a_course = CourseManager :: get_course_information($course_code); - if (!empty($a_course)) { - $tbl_posts = Database :: get_course_table(TABLE_FORUM_POST); - $tbl_forums = Database :: get_course_table(TABLE_FORUM); + $courseInfo = api_get_course_info($course_code); + if (!empty($courseInfo)) { + $tbl_posts = Database :: get_course_table(TABLE_FORUM_POST); + $tbl_forums = Database :: get_course_table(TABLE_FORUM); $condition_session = ''; if (isset($session_id)) { $session_id = intval($session_id); - $condition_session = ' AND f.session_id = '. $session_id; + $condition_session = api_get_session_condition($session_id, true, false, 'f.session_id'); } - $course_id = $a_course['real_id']; + $course_id = $courseInfo['real_id']; + $groupId = intval($groupId); + if (!empty($groupId)) { + $groupCondition = " i.to_group_id = $groupId "; + } else { + $groupCondition = " (i.to_group_id = 0 OR i.to_group_id IS NULL) "; + } - $sql = "SELECT count(*) FROM $tbl_posts p INNER JOIN $tbl_forums f - ON f.forum_id = p.forum_id - WHERE p.c_id = $course_id AND - f.c_id = $course_id - $condition_session + $item = Database :: get_course_table(TABLE_ITEM_PROPERTY); + $sql = "SELECT count(*) FROM $tbl_posts p + INNER JOIN $tbl_forums f + ON f.forum_id = p.forum_id AND p.c_id = f.c_id + INNER JOIN $item i + ON (tool = '".TOOL_FORUM."' AND f.c_id = i.c_id AND f.iid = i.ref) + WHERE + p.c_id = $course_id AND + f.c_id = $course_id AND + $groupCondition + $condition_session "; $result = Database::query($sql); $row = Database::fetch_row($result); $count = $row[0]; + return $count; } else { return null; @@ -3292,31 +3375,60 @@ class Tracking * @param int Session id (optional), * if param $session_id is null(default) it'll return results including * sessions, 0 = session is not filtered + * @param int $groupId * @return int The number of threads by course */ - public static function count_number_of_threads_by_course($course_code, $session_id = null) + public static function count_number_of_threads_by_course($course_code, $session_id = null, $groupId = 0) { $course_info = api_get_course_info($course_code); if (empty($course_info)) { return null; } + $course_id = $course_info['real_id']; $tbl_threads = Database :: get_course_table(TABLE_FORUM_THREAD); - $tbl_forums = Database :: get_course_table(TABLE_FORUM); + $tbl_forums = Database :: get_course_table(TABLE_FORUM); + $condition_session = ''; if (isset($session_id)) { $session_id = intval($session_id); - $condition_session = ' AND f.session_id = '. $session_id; + $condition_session = ' AND f.session_id = '. $session_id; } - $sql = "SELECT count(*) FROM $tbl_threads t INNER JOIN $tbl_forums f ON f.forum_id = t.forum_id - WHERE t.c_id = $course_id AND f.c_id = $course_id $condition_session "; + $groupId = intval($groupId); + + if (!empty($groupId)) { + $groupCondition = " i.to_group_id = $groupId "; + } else { + $groupCondition = " (i.to_group_id = 0 OR i.to_group_id IS NULL) "; + } + + $item = Database :: get_course_table(TABLE_ITEM_PROPERTY); + $sql = "SELECT count(*) + FROM $tbl_threads t + INNER JOIN $tbl_forums f + ON f.iid = t.forum_id AND f.c_id = t.c_id + INNER JOIN $item i + ON ( + tool = '".TOOL_FORUM_THREAD."' AND + f.c_id = i.c_id AND + t.iid = i.ref + ) + WHERE + t.c_id = $course_id AND + f.c_id = $course_id AND + $groupCondition + $condition_session + "; + $result = Database::query($sql); if (Database::num_rows($result)) { $row = Database::fetch_row($result); $count = $row[0]; + return $count; } else { + return null; } } @@ -3327,9 +3439,10 @@ class Tracking * @param int Session id (optional), * if param $session_id is null(default) it'll return results * including sessions, 0 = session is not filtered + * @param int $groupId * @return int The number of forums by course */ - public static function count_number_of_forums_by_course($course_code, $session_id = null) + public static function count_number_of_forums_by_course($course_code, $session_id = null, $groupId = 0) { $course_info = api_get_course_info($course_code); if (empty($course_info)) { @@ -3340,11 +3453,28 @@ class Tracking $condition_session = ''; if (isset($session_id)) { $session_id = intval($session_id); - $condition_session = ' session_id = '. $session_id; + $condition_session = ' AND f.session_id = '. $session_id; + } + + $groupId = intval($groupId); + if (!empty($groupId)) { + $groupCondition = " i.to_group_id = $groupId "; + } else { + $groupCondition = " (i.to_group_id = 0 OR i.to_group_id IS NULL) "; } $tbl_forums = Database :: get_course_table(TABLE_FORUM); - $sql = "SELECT count(*) FROM $tbl_forums WHERE c_id = $course_id AND $condition_session"; + $item = Database :: get_course_table(TABLE_ITEM_PROPERTY); + + $sql = "SELECT count(*) + FROM $tbl_forums f + INNER JOIN $item i + ON f.c_id = i.c_id AND f.iid = i.ref AND tool = '".TOOL_FORUM."' + WHERE + f.c_id = $course_id AND + $groupCondition + $condition_session + "; $result = Database::query($sql); if (Database::num_rows($result)) { $row = Database::fetch_row($result); diff --git a/main/tracking/courseLog.php b/main/tracking/courseLog.php index 8dcad8b09a..17361f19f0 100755 --- a/main/tracking/courseLog.php +++ b/main/tracking/courseLog.php @@ -219,6 +219,10 @@ Display::display_header($nameTools, 'Tracking'); echo '
        '; echo Display::return_icon('user_na.png', get_lang('StudentsTracking'), array(), ICON_SIZE_MEDIUM); +echo Display::url( + Display::return_icon('group.png', get_lang('GroupReporting'), array(), ICON_SIZE_MEDIUM), + 'course_log_groups.php?'.api_get_cidreq() +); echo Display::url( Display::return_icon('course.png', get_lang('CourseTracking'), array(), ICON_SIZE_MEDIUM), 'course_log_tools.php?'.api_get_cidreq() diff --git a/main/tracking/course_log_groups.php b/main/tracking/course_log_groups.php new file mode 100644 index 0000000000..ec428c87e1 --- /dev/null +++ b/main/tracking/course_log_groups.php @@ -0,0 +1,127 @@ + 'name', + 'index' => 'name', + 'width' => '200', + 'align' => 'left', + ), + array( + 'name' => 'time', + 'index' => 'time', + 'width' => '50', + 'align' => 'left', + 'sortable' => 'false', + ), + array( + 'name' => 'progress', + 'index' => 'progress', + 'width' => '50', + 'align' => 'left', + 'sortable' => 'false', + ), + array( + 'name' => 'score', + 'index' => 'score', + 'width' => '50', + 'align' => 'left', + 'sortable' => 'false', + ), + array( + 'name' => 'works', + 'index' => 'works', + 'width' => '50', + 'align' => 'left', + 'sortable' => 'false', + ), + array( + 'name' => 'messages', + 'index' => 'messages', + 'width' => '50', + 'align' => 'left', + 'sortable' => 'false', + ), + array( + 'name' => 'actions', + 'index' => 'actions', + 'width' => '50', + 'align' => 'left', + 'formatter' => 'action_formatter', + 'sortable' => 'false', + ), +); + +// Autowidth +$extra_params['autowidth'] = 'true'; +// height auto +$extra_params['height'] = 'auto'; + +$action_links = ' +function action_formatter(cellvalue, options, rowObject) { + return \''.Display::return_icon('2rightarrow.gif',get_lang('Edit'),'',ICON_SIZE_SMALL).''. + '\'; +}'; + + +// Add the JS needed to use the jqgrid +$htmlHeadXtra[] = api_get_jqgrid_js(); + +$htmlHeadXtra[] = ' +'; + +Display::display_header(); + +echo '
        '; +echo Display::url(Display::return_icon('user.png', get_lang('StudentsTracking'), array(), ICON_SIZE_MEDIUM), 'courseLog.php?'.api_get_cidreq(true, false)); +echo Display::url(Display::return_icon('group_na.png', get_lang('GroupReporting'), array(), ICON_SIZE_MEDIUM), '#'); +echo Display::url(Display::return_icon('course.png', get_lang('CourseTracking'), array(), ICON_SIZE_MEDIUM), 'course_log_tools.php?'.api_get_cidreq(true, false)); +echo Display::url(Display::return_icon('tools.png', get_lang('ResourcesTracking'), array(), ICON_SIZE_MEDIUM), 'course_log_resources.php?'.api_get_cidreq(true, false)); +echo '
        '; + +echo Display::grid_html('group_users'); + +Display::display_footer(); diff --git a/main/tracking/course_log_resources.php b/main/tracking/course_log_resources.php index e09d86249d..ba7c4d640c 100755 --- a/main/tracking/course_log_resources.php +++ b/main/tracking/course_log_resources.php @@ -65,6 +65,11 @@ echo Display::url( api_get_path(WEB_CODE_PATH).'tracking/courseLog.php?'.api_get_cidreq() ); +echo Display::url( + Display::return_icon('group.png', get_lang('GroupReporting'), array(), ICON_SIZE_MEDIUM), + 'course_log_groups.php?'.api_get_cidreq(true, false) +); + echo Display::url( Display::return_icon('course.png', get_lang('CourseTracking'), array(), ICON_SIZE_MEDIUM), api_get_path(WEB_CODE_PATH).'tracking/course_log_tools.php?'.api_get_cidreq() diff --git a/main/tracking/course_log_tools.php b/main/tracking/course_log_tools.php index fe26706ece..232ae40026 100755 --- a/main/tracking/course_log_tools.php +++ b/main/tracking/course_log_tools.php @@ -5,14 +5,12 @@ * @package chamilo.tracking */ -/* INIT SECTION */ - -$pathopen = isset($_REQUEST['pathopen']) ? $_REQUEST['pathopen'] : null; -// Including the global initialization file require_once '../inc/global.inc.php'; $current_course_tool = TOOL_TRACKING; $course_info = api_get_course_info(); +$groupId = isset($_REQUEST['gidReq']) ? intval($_REQUEST['gidReq']) : 0; +//$groupId = api_get_group_id(); $from_myspace = false; $from = isset($_GET['from']) ? $_GET['from'] : null; @@ -35,7 +33,7 @@ if (!$is_allowedToTrack) { // Including additional libraries. require_once api_get_path(SYS_CODE_PATH).'resourcelinker/resourcelinker.inc.php'; -$TABLEQUIZ = Database::get_course_table(TABLE_QUIZ_TEST); +$TABLEQUIZ = Database::get_course_table(TABLE_QUIZ_TEST); // Starting the output buffering when we are exporting the information. $export_csv = isset($_GET['export']) && $_GET['export'] == 'csv' ? true : false; @@ -65,25 +63,62 @@ Display::display_header($nameTools, 'Tracking'); // getting all the students of the course if (empty($session_id)) { // Registered students in a course outside session. - $a_students = CourseManager :: get_student_list_from_course_code(api_get_course_id()); + $a_students = CourseManager:: get_student_list_from_course_code( + api_get_course_id(), + false, + 0, + null, + null, + true, + api_get_group_id() + ); } else { // Registered students in session. - $a_students = CourseManager :: get_student_list_from_course_code(api_get_course_id(), true, api_get_session_id()); + $a_students = CourseManager:: get_student_list_from_course_code( + api_get_course_id(), + true, + api_get_session_id() + ); } - $nbStudents = count($a_students); +$student_ids = array_keys($a_students); +$studentCount = count($student_ids); /* MAIN CODE */ echo '
        '; -echo Display::url(Display::return_icon('user.png', get_lang('StudentsTracking'), array(), 32), 'courseLog.php?'.api_get_cidreq()); -echo Display::return_icon('course_na.png', get_lang('CourseTracking'), array(), 32); -echo Display::url(Display::return_icon('tools.png', get_lang('ResourcesTracking'), array(), 32), 'course_log_resources.php?'.api_get_cidreq()); +echo Display::url( + Display::return_icon('user.png', get_lang('StudentsTracking'), array(), ICON_SIZE_MEDIUM), + 'courseLog.php?'.api_get_cidreq() +); + +if (empty($groupId)) { + echo Display::url( + Display::return_icon('group.png', get_lang('GroupReporting'), array(), ICON_SIZE_MEDIUM), + 'course_log_groups.php?'.api_get_cidreq() + ); + echo Display::url(Display::return_icon('course_na.png', get_lang('CourseTracking'), array(), ICON_SIZE_MEDIUM), '#'); +} else { + echo Display::url( + Display::return_icon('group_na.png', get_lang('GroupReporting'), array(), ICON_SIZE_MEDIUM), + '#' + ); + echo Display::url( + Display::return_icon('course.png', get_lang('CourseTracking'), array(), ICON_SIZE_MEDIUM), + 'course_log_tools.php?'.api_get_cidreq(true, false).'&gidReq=0' + ); +} + +echo Display::url( + Display::return_icon('tools.png', get_lang('ResourcesTracking'), array(), ICON_SIZE_MEDIUM), + 'course_log_resources.php?'.api_get_cidreq() +); echo ''; -echo ''.Display::return_icon('printer.png', get_lang('Print'),'',ICON_SIZE_MEDIUM).''; +echo ''. + Display::return_icon('printer.png', get_lang('Print'),'',ICON_SIZE_MEDIUM).''; echo ' '.Display::return_icon('export_csv.png', get_lang('ExportAsCSV'),'',ICON_SIZE_MEDIUM).''; @@ -95,15 +130,15 @@ $course_code = api_get_course_id(); $course_id = api_get_course_int_id(); $list = new LearnpathList(null, $course_code, $session_id); - $flat_list = $list->get_flat_list(); - if (count($flat_list) > 0) { // learning path tracking echo '
        - '.Display::page_subheader(Display::return_icon('scorms.gif',get_lang('AverageProgressInLearnpath')).get_lang('AverageProgressInLearnpath')).' + '.Display::page_subheader( + Display::return_icon('scorms.gif',get_lang('AverageProgressInLearnpath')).get_lang('AverageProgressInLearnpath') + ).'
        '; if ($export_csv) { @@ -116,10 +151,15 @@ if (count($flat_list) > 0) { $lp_avg_progress = 0; foreach ($a_students as $student_id => $student) { // get the progress in learning pathes - $lp_avg_progress += Tracking::get_avg_student_progress($student_id, $course_code, array($lp_id), $session_id); + $lp_avg_progress += Tracking::get_avg_student_progress( + $student_id, + $course_code, + array($lp_id), + $session_id + ); } - if ($nbStudents > 0) { - $lp_avg_progress = $lp_avg_progress / $nbStudents; + if ($studentCount > 0) { + $lp_avg_progress = $lp_avg_progress / $studentCount; } else { $lp_avg_progress = null; } @@ -145,7 +185,9 @@ if (count($flat_list) > 0) { // Exercices tracking. echo '
        - '.Display::page_subheader(Display::return_icon('quiz.gif',get_lang('AverageResultsToTheExercices')).get_lang('AverageResultsToTheExercices')).' + '.Display::page_subheader( + Display::return_icon('quiz.gif',get_lang('AverageResultsToTheExercices')).get_lang('AverageResultsToTheExercices') + ).'
        '; $course_id = api_get_course_int_id(); @@ -163,18 +205,16 @@ if ($export_csv) { $course_path_params = '&cidReq='.$course_code.'&id_session='.$session_id; if (Database::num_rows($rs) > 0) { - $student_ids = array_keys($a_students); - $count_students = count($student_ids); while ($quiz = Database::fetch_array($rs)) { $quiz_avg_score = 0; - if ($count_students > 0) { + if ($studentCount > 0) { foreach ($student_ids as $student_id) { $avg_student_score = Tracking::get_avg_student_exercise_score($student_id, $course_code, $quiz['id'], $session_id); $quiz_avg_score += $avg_student_score; } } - $count_students = ($count_students == 0 || is_null($count_students) || $count_students == '') ? 1 : $count_students; - $quiz_avg_score = round(($quiz_avg_score / $count_students), 2).'%'; + $studentCount = ($studentCount == 0 || is_null($studentCount) || $studentCount == '') ? 1 : $studentCount; + $quiz_avg_score = round(($quiz_avg_score / $studentCount), 2).'%'; $url = api_get_path(WEB_CODE_PATH).'exercice/overview.php?exerciseId='.$quiz['id'].$course_path_params; echo ''; @@ -190,22 +230,51 @@ if (Database::num_rows($rs) > 0) { $csv_content[] = $temp; } } + echo '
        '.Display::url($quiz['title'], $url).''.$quiz_avg_score.'
        '; echo '
        '; -// Forums tracking. -echo '
        - '.Display::page_subheader(Display::return_icon('forum.gif', get_lang('Forum')).get_lang('Forum').' - '.get_lang('SeeDetail').''). - ''; -$count_number_of_posts_by_course = Tracking :: count_number_of_posts_by_course($course_code, $session_id); -$count_number_of_forums_by_course = Tracking :: count_number_of_forums_by_course($course_code, $session_id); -$count_number_of_threads_by_course = Tracking :: count_number_of_threads_by_course($course_code, $session_id); +$filterByUsers = array(); + +if (!empty($groupId)) { + $filterByUsers = $student_ids; +} + +$count_number_of_forums_by_course = Tracking:: count_number_of_forums_by_course( + $course_code, + $session_id, + $groupId +); + +$count_number_of_threads_by_course = Tracking:: count_number_of_threads_by_course( + $course_code, + $session_id, + $groupId +); + +$count_number_of_posts_by_course = Tracking:: count_number_of_posts_by_course( + $course_code, + $session_id, + $groupId +); + if ($export_csv) { $csv_content[] = array(get_lang('Forum'), ''); $csv_content[] = array(get_lang('ForumForumsNumber', ''), $count_number_of_forums_by_course); $csv_content[] = array(get_lang('ForumThreadsNumber', ''), $count_number_of_threads_by_course); $csv_content[] = array(get_lang('ForumPostsNumber', ''), $count_number_of_posts_by_course); } + +// Forums tracking. +echo '
        + '.Display::page_subheader( + Display::return_icon('forum.gif', get_lang('Forum')). + get_lang('Forum').' - '. + get_lang('SeeDetail').'' + ). + '
        '; + + echo ''; echo ''; echo ''; From 412f9460932d2b1d1468aeef464a8721eddff9aa Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 21 Jul 2015 14:24:51 +0200 Subject: [PATCH 5/5] Only show forum group information, the rest depends in the course. See BT#5758 --- main/inc/lib/tracking.lib.php | 12 +- main/tracking/course_log_tools.php | 454 ++++++++++++++++++----------- 2 files changed, 290 insertions(+), 176 deletions(-) diff --git a/main/inc/lib/tracking.lib.php b/main/inc/lib/tracking.lib.php index 4b49ea4cce..b8fd3b580e 100755 --- a/main/inc/lib/tracking.lib.php +++ b/main/inc/lib/tracking.lib.php @@ -3502,7 +3502,6 @@ class Tracking //protect data $last_days = intval($last_days); - $course_code = Database::escape_string($course_code); $session_id = intval($session_id); $tbl_stats_access = Database :: get_main_table(TABLE_STATISTIC_TRACK_E_ACCESS); $now = api_get_utc_datetime(); @@ -3863,7 +3862,7 @@ class Tracking */ public static function get_tools_most_used_by_course($courseId, $session_id = null) { - $course_code = intval($courseId); + $courseId = intval($courseId); $data = array(); $TABLETRACK_ACCESS = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LASTACCESS); $condition_session = ''; @@ -3871,7 +3870,10 @@ class Tracking $session_id = intval($session_id); $condition_session = ' AND access_session_id = '. $session_id; } - $sql = "SELECT access_tool, COUNT(DISTINCT access_user_id),count( access_tool ) as count_access_tool + $sql = "SELECT + access_tool, + COUNT(DISTINCT access_user_id), + count(access_tool) as count_access_tool FROM $TABLETRACK_ACCESS WHERE access_tool IS NOT NULL AND @@ -4070,8 +4072,8 @@ class Tracking $data = array(); - $TABLETRACK_LINKS = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LINKS); - $TABLECOURSE_LINKS = Database::get_course_table(TABLE_LINK); + $TABLETRACK_LINKS = Database::get_main_table(TABLE_STATISTIC_TRACK_E_LINKS); + $TABLECOURSE_LINKS = Database::get_course_table(TABLE_LINK); $condition_session = ''; if (isset($session_id)) { diff --git a/main/tracking/course_log_tools.php b/main/tracking/course_log_tools.php index 232ae40026..9663564acf 100755 --- a/main/tracking/course_log_tools.php +++ b/main/tracking/course_log_tools.php @@ -30,6 +30,22 @@ if (!$is_allowedToTrack) { exit; } +$showChatReporting = true; +$showTrackingReporting = true; +$documentReporting = true; +$linkReporting = true; +$exerciseReporting = true; +$lpReporting = true; + +if (!empty($groupId)) { + $showChatReporting = false; + $showTrackingReporting = false; + $documentReporting = false; + $linkReporting = false; + $exerciseReporting = false; + $lpReporting = false; +} + // Including additional libraries. require_once api_get_path(SYS_CODE_PATH).'resourcelinker/resourcelinker.inc.php'; @@ -129,110 +145,133 @@ echo ''; $course_code = api_get_course_id(); $course_id = api_get_course_int_id(); -$list = new LearnpathList(null, $course_code, $session_id); -$flat_list = $list->get_flat_list(); +if ($lpReporting) { + $list = new LearnpathList(null, $course_code, $session_id); + $flat_list = $list->get_flat_list(); -if (count($flat_list) > 0) { - - // learning path tracking - echo '
        - '.Display::page_subheader( - Display::return_icon('scorms.gif',get_lang('AverageProgressInLearnpath')).get_lang('AverageProgressInLearnpath') - ).' -
        '.get_lang('ForumForumsNumber').''.$count_number_of_forums_by_course.'
        '.get_lang('ForumThreadsNumber').''.$count_number_of_threads_by_course.'
        '.get_lang('ForumPostsNumber').''.$count_number_of_posts_by_course.'
        '; + if (count($flat_list) > 0) { - if ($export_csv) { - $temp = array(get_lang('AverageProgressInLearnpath', ''), ''); - $csv_content[] = array('', ''); - $csv_content[] = $temp; - } + // learning path tracking + echo '
        + '.Display::page_subheader( + Display::return_icon( + 'scorms.gif', + get_lang('AverageProgressInLearnpath') + ).get_lang('AverageProgressInLearnpath') + ).' +
        '; - foreach ($flat_list as $lp_id => $lp) { - $lp_avg_progress = 0; - foreach ($a_students as $student_id => $student) { - // get the progress in learning pathes - $lp_avg_progress += Tracking::get_avg_student_progress( - $student_id, - $course_code, - array($lp_id), - $session_id - ); - } - if ($studentCount > 0) { - $lp_avg_progress = $lp_avg_progress / $studentCount; - } else { - $lp_avg_progress = null; + if ($export_csv) { + $temp = array(get_lang('AverageProgressInLearnpath', ''), ''); + $csv_content[] = array('', ''); + $csv_content[] = $temp; } - // Separated presentation logic. - if (is_null($lp_avg_progress)) { - $lp_avg_progress = '0%'; - } else { - $lp_avg_progress = round($lp_avg_progress, 1).'%'; + + foreach ($flat_list as $lp_id => $lp) { + $lp_avg_progress = 0; + foreach ($a_students as $student_id => $student) { + // get the progress in learning pathes + $lp_avg_progress += Tracking::get_avg_student_progress( + $student_id, + $course_code, + array($lp_id), + $session_id + ); + } + if ($studentCount > 0) { + $lp_avg_progress = $lp_avg_progress / $studentCount; + } else { + $lp_avg_progress = null; + } + // Separated presentation logic. + if (is_null($lp_avg_progress)) { + $lp_avg_progress = '0%'; + } else { + $lp_avg_progress = round($lp_avg_progress, 1).'%'; + } + echo ''; + if ($export_csv) { + $temp = array($lp['lp_name'], $lp_avg_progress); + $csv_content[] = $temp; + } } - echo ''; + echo '
        '.$lp['lp_name'].''.$lp_avg_progress.'
        '.$lp['lp_name'].''.$lp_avg_progress.'
        '; + } else { if ($export_csv) { - $temp = array($lp['lp_name'], $lp_avg_progress); + $temp = array(get_lang('NoLearningPath', ''), ''); $csv_content[] = $temp; } } - echo '
        '; -} else { - if ($export_csv) { - $temp = array(get_lang('NoLearningPath', ''), ''); - $csv_content[] = $temp; - } } -// Exercices tracking. -echo '
        - '.Display::page_subheader( - Display::return_icon('quiz.gif',get_lang('AverageResultsToTheExercices')).get_lang('AverageResultsToTheExercices') - ).' - '; +if ($exerciseReporting) { -$course_id = api_get_course_int_id(); + // Exercices tracking. + echo '
        + '.Display::page_subheader( + Display::return_icon( + 'quiz.gif', + get_lang('AverageResultsToTheExercices') + ).get_lang('AverageResultsToTheExercices') + ).' +
        '; -$sql = "SELECT id, title FROM $TABLEQUIZ - WHERE c_id = $course_id AND active <> -1 AND session_id = $session_id"; -$rs = Database::query($sql); + $course_id = api_get_course_int_id(); -if ($export_csv) { - $temp = array(get_lang('AverageProgressInLearnpath'), ''); - $csv_content[] = array('', ''); - $csv_content[] = $temp; -} + $sql = "SELECT id, title FROM $TABLEQUIZ + WHERE c_id = $course_id AND active <> -1 AND session_id = $session_id"; + $rs = Database::query($sql); -$course_path_params = '&cidReq='.$course_code.'&id_session='.$session_id; + if ($export_csv) { + $temp = array(get_lang('AverageProgressInLearnpath'), ''); + $csv_content[] = array('', ''); + $csv_content[] = $temp; + } -if (Database::num_rows($rs) > 0) { - while ($quiz = Database::fetch_array($rs)) { - $quiz_avg_score = 0; - if ($studentCount > 0) { - foreach ($student_ids as $student_id) { - $avg_student_score = Tracking::get_avg_student_exercise_score($student_id, $course_code, $quiz['id'], $session_id); - $quiz_avg_score += $avg_student_score; + $course_path_params = '&cidReq='.$course_code.'&id_session='.$session_id; + + if (Database::num_rows($rs) > 0) { + while ($quiz = Database::fetch_array($rs)) { + $quiz_avg_score = 0; + if ($studentCount > 0) { + foreach ($student_ids as $student_id) { + $avg_student_score = Tracking::get_avg_student_exercise_score( + $student_id, + $course_code, + $quiz['id'], + $session_id + ); + $quiz_avg_score += $avg_student_score; + } + } + $studentCount = ($studentCount == 0 || is_null( + $studentCount + ) || $studentCount == '') ? 1 : $studentCount; + $quiz_avg_score = round(($quiz_avg_score / $studentCount), 2).'%'; + $url = api_get_path( + WEB_CODE_PATH + ).'exercice/overview.php?exerciseId='.$quiz['id'].$course_path_params; + + echo ''; + if ($export_csv) { + $temp = array($quiz['title'], $quiz_avg_score); + $csv_content[] = $temp; } } - $studentCount = ($studentCount == 0 || is_null($studentCount) || $studentCount == '') ? 1 : $studentCount; - $quiz_avg_score = round(($quiz_avg_score / $studentCount), 2).'%'; - $url = api_get_path(WEB_CODE_PATH).'exercice/overview.php?exerciseId='.$quiz['id'].$course_path_params; - - echo ''; + } else { + echo ''; if ($export_csv) { - $temp = array($quiz['title'], $quiz_avg_score); + $temp = array(get_lang('NoExercises', ''), ''); $csv_content[] = $temp; } } -} else { - echo ''; - if ($export_csv) { - $temp = array(get_lang('NoExercises', ''), ''); - $csv_content[] = $temp; - } -} -echo '
        '.Display::url( + $quiz['title'], + $url + ).''.$quiz_avg_score.'
        '.Display::url($quiz['title'], $url).''.$quiz_avg_score.'
        '.get_lang('NoExercises').'
        '.get_lang('NoExercises').'
        '; -echo '
        '; + echo ''; + echo '
        '; +} $filterByUsers = array(); @@ -259,10 +298,10 @@ $count_number_of_posts_by_course = Tracking:: count_number_of_posts_by_course( ); if ($export_csv) { - $csv_content[] = array(get_lang('Forum'), ''); - $csv_content[] = array(get_lang('ForumForumsNumber', ''), $count_number_of_forums_by_course); - $csv_content[] = array(get_lang('ForumThreadsNumber', ''), $count_number_of_threads_by_course); - $csv_content[] = array(get_lang('ForumPostsNumber', ''), $count_number_of_posts_by_course); + $csv_content[] = array(get_lang('Forum')); + $csv_content[] = array(get_lang('ForumForumsNumber'), $count_number_of_forums_by_course); + $csv_content[] = array(get_lang('ForumThreadsNumber'), $count_number_of_threads_by_course); + $csv_content[] = array(get_lang('ForumPostsNumber'), $count_number_of_posts_by_course); } // Forums tracking. @@ -282,124 +321,197 @@ echo ''; echo '
        '; // Chat tracking. +if ($showChatReporting) { + echo '
        + '.Display::page_subheader( + Display::return_icon('chat.gif', get_lang('Chat')).get_lang('Chat') + ).' + '; + $chat_connections_during_last_x_days_by_course = Tracking::chat_connections_during_last_x_days_by_course( + $course_code, + 7, + $session_id + ); + if ($export_csv) { + $csv_content[] = array(get_lang('Chat', ''), ''); + $csv_content[] = array( + sprintf( + get_lang('ChatConnectionsDuringLastXDays', ''), + '7' + ), + $chat_connections_during_last_x_days_by_course + ); + } + echo ''; -echo '
        - '.Display::page_subheader(Display::return_icon('chat.gif',get_lang('Chat')).get_lang('Chat')).' -
        '.sprintf( + get_lang('ChatConnectionsDuringLastXDays'), + '7' + ).''.$chat_connections_during_last_x_days_by_course.'
        '; -$chat_connections_during_last_x_days_by_course = Tracking::chat_connections_during_last_x_days_by_course($course_code, 7, $session_id); -if ($export_csv) { - $csv_content[] = array(get_lang('Chat', ''), ''); - $csv_content[] = array(sprintf(get_lang('ChatConnectionsDuringLastXDays', ''), '7'), $chat_connections_during_last_x_days_by_course); + echo '
        '; + echo '
        '; } -echo ''.sprintf(get_lang('ChatConnectionsDuringLastXDays'), '7').''.$chat_connections_during_last_x_days_by_course.''; - -echo ''; -echo '
        '; // Tools tracking. -echo '
        - '.Display::page_subheader(Display::return_icon('acces_tool.gif', get_lang('ToolsMostUsed')).get_lang('ToolsMostUsed')).' +if ($showTrackingReporting) { + echo '
        + '.Display::page_subheader( + Display::return_icon( + 'acces_tool.gif', + get_lang('ToolsMostUsed') + ).get_lang('ToolsMostUsed') + ).' '; -$tools_most_used = Tracking::get_tools_most_used_by_course($course_id, $session_id); + $tools_most_used = Tracking::get_tools_most_used_by_course( + $course_id, + $session_id + ); -if ($export_csv) { - $temp = array(get_lang('ToolsMostUsed'), ''); - $csv_content[] = $temp; -} + if ($export_csv) { + $temp = array(get_lang('ToolsMostUsed'), ''); + $csv_content[] = $temp; + } -if (!empty($tools_most_used)) { - foreach ($tools_most_used as $row) { - echo ' + if (!empty($tools_most_used)) { + foreach ($tools_most_used as $row) { + echo ' - + '; - if ($export_csv) { - $temp = array(get_lang(ucfirst($row['access_tool']), ''), $row['count_access_tool'].' '.get_lang('Clicks', '')); - $csv_content[] = $temp; + if ($export_csv) { + $temp = array( + get_lang(ucfirst($row['access_tool']), ''), + $row['count_access_tool'].' '.get_lang('Clicks', '') + ); + $csv_content[] = $temp; + } } } -} - -echo '
        '.get_lang(ucfirst($row['access_tool'])).''.$row['count_access_tool'].' '.get_lang('Clicks').''.$row['count_access_tool'].' '.get_lang( + 'Clicks' + ).'
        '; -echo '
        '; -// Documents tracking. -if (!isset($_GET['num']) || empty($_GET['num'])) { - $num = 3; - $link = ' - '.get_lang('SeeDetail').''; -} else { - $num = 1000; - $link = ' - '.get_lang('ViewMinus').''; + echo '
        '; + echo '
        '; } - echo '
        - '.Display::page_subheader(Display::return_icon('documents.gif',get_lang('DocumentsMostDownloaded')).' '.get_lang('DocumentsMostDownloaded').$link).' - '; +if ($documentReporting) { + // Documents tracking. + if (!isset($_GET['num']) || empty($_GET['num'])) { + $num = 3; + $link = ' - '.get_lang('SeeDetail').''; + } else { + $num = 1000; + $link = ' - '.get_lang('ViewMinus').''; + } -$documents_most_downloaded = Tracking::get_documents_most_downloaded_by_course($course_code, $session_id, $num); + echo '
        + '.Display::page_subheader( + Display::return_icon( + 'documents.gif', + get_lang('DocumentsMostDownloaded') + ).' '.get_lang('DocumentsMostDownloaded').$link + ).' +
        '; -if ($export_csv) { - $temp = array(get_lang('DocumentsMostDownloaded', ''), ''); - $csv_content[] = array('', ''); - $csv_content[] = $temp; -} + $documents_most_downloaded = Tracking::get_documents_most_downloaded_by_course( + $course_code, + $session_id, + $num + ); + + if ($export_csv) { + $temp = array(get_lang('DocumentsMostDownloaded', ''), ''); + $csv_content[] = array('', ''); + $csv_content[] = $temp; + } -if (!empty($documents_most_downloaded)) { - foreach ($documents_most_downloaded as $row) { - echo ' - - - '; + if (!empty($documents_most_downloaded)) { + foreach ($documents_most_downloaded as $row) { + echo ' + + + '; + if ($export_csv) { + $temp = array( + $row['down_doc_path'], + $row['count_down'].' '.get_lang('Clicks', '') + ); + $csv_content[] = $temp; + } + } + } else { + echo ''; if ($export_csv) { - $temp = array($row['down_doc_path'], $row['count_down'].' '.get_lang('Clicks', '')); + $temp = array(get_lang('NoDocumentDownloaded', ''), ''); $csv_content[] = $temp; } } -} else { - echo ''; - if ($export_csv) { - $temp = array(get_lang('NoDocumentDownloaded', ''), ''); - $csv_content[] = $temp; - } + echo '
        '.Display::url($row['down_doc_path'], api_get_path(WEB_CODE_PATH).'document/show_content.php?file='.$row['down_doc_path'].$course_path_params).''.$row['count_down'].' '.get_lang('Clicks').'
        '.Display::url( + $row['down_doc_path'], + api_get_path( + WEB_CODE_PATH + ).'document/show_content.php?file='.$row['down_doc_path'].$course_path_params + ).''.$row['count_down'].' '.get_lang( + 'Clicks' + ).'
        '.get_lang('NoDocumentDownloaded').'
        '.get_lang('NoDocumentDownloaded').'
        '; + + echo '
        '; } -echo ''; -echo '
        '; +if ($linkReporting) { -// links tracking - echo '
        - '.Display::page_subheader(Display::return_icon('link.gif',get_lang('LinksMostClicked')).' '.get_lang('LinksMostClicked')).' - '; + // links tracking + echo '
        + '.Display::page_subheader( + Display::return_icon( + 'link.gif', + get_lang('LinksMostClicked') + ).' '.get_lang('LinksMostClicked') + ).' +
        '; -$links_most_visited = Tracking::get_links_most_visited_by_course($course_code, $session_id); + $links_most_visited = Tracking::get_links_most_visited_by_course( + $course_code, + $session_id + ); -if ($export_csv) { - $temp = array(get_lang('LinksMostClicked'), ''); - $csv_content[] = array('', ''); - $csv_content[] = $temp; -} + if ($export_csv) { + $temp = array(get_lang('LinksMostClicked'), ''); + $csv_content[] = array('', ''); + $csv_content[] = $temp; + } -if (!empty($links_most_visited)) { - foreach ($links_most_visited as $row) { - echo ' - - - '; - if ($export_csv){ - $temp = array($row['title'], $row['count_visits'].' '.get_lang('Clicks', '')); + if (!empty($links_most_visited)) { + foreach ($links_most_visited as $row) { + echo ' + + + '; + if ($export_csv) { + $temp = array( + $row['title'], + $row['count_visits'].' '.get_lang('Clicks', '') + ); + $csv_content[] = $temp; + } + } + } else { + echo ''; + if ($export_csv) { + $temp = array(get_lang('NoLinkVisited'), ''); $csv_content[] = $temp; } } -} else { - echo ''; - if ($export_csv) { - $temp = array(get_lang('NoLinkVisited'), ''); - $csv_content[] = $temp; - } + echo '
        '.Display::url($row['title'].' ('.$row['url'].')', $row['url']).''.$row['count_visits'].' '.get_lang('Clicks').'
        '.Display::url( + $row['title'].' ('.$row['url'].')', + $row['url'] + ).''.$row['count_visits'].' '.get_lang( + 'Clicks' + ).'
        '.get_lang('NoLinkVisited').'
        '.get_lang('NoLinkVisited').'
        '; + echo '
        '; } -echo ''; -echo '
        '; // send the csv file if asked if ($export_csv) {