]> git.mjollnir.org Git - moodle.git/commitdiff
Added option to download logs in excel or csv formats. Merged in code contributed by
authorvyshane <vyshane>
Mon, 15 May 2006 05:01:00 +0000 (05:01 +0000)
committervyshane <vyshane>
Mon, 15 May 2006 05:01:00 +0000 (05:01 +0000)
Daniele Cordella <d.cordella@iss.it>. Originally posted as bug 5024.

course/lib.php
course/report/log/index.php
course/report/log/lib.php

index 802e22456444e9b261cf78bf7c0fe87b2f5e0d2d..6f6a2e05fd26f0d28df457a50efabc72c14d5eb2 100644 (file)
@@ -6,24 +6,20 @@ if (defined('COURSE_MAX_LOG_DISPLAY')) {  // Being included again - should never
     return;
 }
 
-define('COURSE_MAX_LOG_DISPLAY', 150);       // days
-
-define('COURSE_MAX_LOGS_PER_PAGE', 1000);    // records
-
-define('COURSE_LIVELOG_REFRESH', 60);        // Seconds
-
-define('COURSE_MAX_RECENT_PERIOD', 172800);  // Two days, in seconds
-
-define('COURSE_MAX_SUMMARIES_PER_PAGE', 10); // courses
-
+define('COURSE_MAX_LOG_DISPLAY', 150);          // days
+define('COURSE_MAX_LOGS_PER_PAGE', 1000);       // records
+define('COURSE_LIVELOG_REFRESH', 60);           // Seconds
+define('COURSE_MAX_RECENT_PERIOD', 172800);     // Two days, in seconds
+define('COURSE_MAX_SUMMARIES_PER_PAGE', 10);    // courses
 define('COURSE_MAX_COURSES_PER_DROPDOWN',1000); //  max courses in log dropdown before switching to optional
+define('COURSE_MAX_USERS_PER_DROPDOWN',1000);   //  max users in log dropdown before switching to optional
+define('FRONTPAGENEWS', 0);
+define('FRONTPAGECOURSELIST', 1);
+define('FRONTPAGECATEGORYNAMES', 2);
+define('FRONTPAGETOPICONLY', 3);
+define("EXCELROWS", 65535);
+define("FIRSTUSEDEXCELROW", 3);
 
-define('COURSE_MAX_USERS_PER_DROPDOWN',1000); //  max users in log dropdown before switching to optional
-
-define("FRONTPAGENEWS",           0);
-define("FRONTPAGECOURSELIST",     1);
-define("FRONTPAGECATEGORYNAMES",  2);
-define("FRONTPAGETOPICONLY",      3);
 
 function print_recent_selector_form($course, $advancedfilter=0, $selecteduser=0, $selecteddate="lastlogin",
                                     $mod="", $modid="activity/All", $modaction="", $selectedgroup="", $selectedsort="default") {
@@ -258,13 +254,14 @@ function make_log_url($module, $url) {
     }
 }
 
-function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $perpage=100,
-                   $url="", $modname="", $modid=0, $modaction="", $groupid=0) {
+
+function build_logs_array($course, $user=0, $date=0, $order="l.time ASC", $limitfrom='', $limitnum='',
+                   $modname="", $modid=0, $modaction="", $groupid=0) {
 
     // It is assumed that $date is the GMT time of midnight for that day,
     // and so the next 86400 seconds worth of logs are printed.
 
-    global $CFG, $db;
+    global $db;
 
     /// Setup for group handling.
     $isteacher = isteacher($course->id);
@@ -285,14 +282,6 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per
     if ($course->id != SITEID || $modid != 0) {
         $joins[] = "l.course='$course->id'";
     }
-    if ($course->id == SITEID) {
-        $courses[0] = '';
-        if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
-            foreach ($ccc as $cc) {
-                $courses[$cc->id] = $cc->shortname;
-            }
-        }
-    }
 
     if ($modname) {
         $joins[] = "l.module = '$modname'";
@@ -344,15 +333,37 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per
         $selector .= $joins[$i] . (($i == count($joins)-1) ? " " : " AND ");
     }
 
-
     $totalcount = 0;  // Initialise
-
-    if (!$logs = get_logs($selector, $order, $page*$perpage, $perpage, $totalcount)) {
+    
+    $result = array();
+    $result['logs'] = get_logs($selector, $order, $limitfrom, $limitnum, $totalcount);
+    $result['totalcount'] = $totalcount;
+    return $result;
+}
+    
+    
+function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $perpage=100,
+                   $url="", $modname="", $modid=0, $modaction="", $groupid=0) {
+    
+    global $CFG;
+    
+    if (!$logs = build_logs_array($course, $user, $date, $order, $page*$perpage, $perpage,
+                       $modname, $modid, $modaction, $groupid)) {
         notify("No logs found!");
         print_footer($course);
         exit;
     }
-
+    
+    if ($course->id == SITEID) {
+        $courses[0] = '';
+        if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
+            foreach ($ccc as $cc) {
+                $courses[$cc->id] = $cc->shortname;
+            }
+        }
+    }
+    
+    $totalcount = $logs['totalcount'];
     $count=0;
     $ldcache = array();
     $tt = getdate(time());
@@ -365,7 +376,6 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per
     print_string("displayingrecords", "", $totalcount);
     echo "</p>\n";
 
-
     print_paging_bar($totalcount, $page, $perpage, "$url&amp;perpage=$perpage&amp;");
 
     echo "<table class=\"logtable\" border=\"0\" align=\"center\" cellpadding=\"3\" cellspacing=\"0\">\n";
@@ -381,7 +391,7 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per
     echo "</tr>\n";
 
     $row = 1;
-    foreach ($logs as $log) {
+    foreach ($logs['logs'] as $log) {
 
         $row = ($row + 1) % 2;
 
@@ -434,6 +444,278 @@ function print_log($course, $user=0, $date=0, $order="l.time ASC", $page=0, $per
 }
 
 
+function print_log_csv($course, $user, $date, $order='l.time DESC', $modname,
+                        $modid, $modaction, $groupid) {
+       
+       $text = get_string('course')."\t".get_string('time')."\t".get_string('ip_address')."\t".
+               get_string('fullname')."\t".get_string('action')."\t".get_string('info');
+       
+       if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
+                       $modname, $modid, $modaction, $groupid)) {
+        return false;
+    }
+    
+    if ($course->id == SITEID) {
+        $courses[0] = '';
+        if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
+            foreach ($ccc as $cc) {
+                $courses[$cc->id] = $cc->shortname;
+            }
+        }
+    }
+       
+    $count=0;
+    $ldcache = array();
+    $tt = getdate(time());
+    $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
+
+    $strftimedatetime = get_string("strftimedatetime");
+    $isteacher = isteacher($course->id);
+
+       $filename = 'logs_'.userdate(time(),get_string('backupnameformat'),99,false);
+       $filename .= '.txt';
+       header("Content-Type: application/download\n");   
+       header("Content-Disposition: attachment; filename=$filename");
+       header("Expires: 0");
+       header("Cache-Control: must-revalidate,post-check=0,pre-check=0");
+       header("Pragma: public");
+
+       echo get_string('savedat').userdate(time(), $strftimedatetime)."\n";
+       echo $text;
+
+       foreach ($logs['logs'] as $log) {
+               if (isset($ldcache[$log->module][$log->action])) {
+                       $ld = $ldcache[$log->module][$log->action];
+               } else {
+                       $ld = get_record('log_display', 'module', $log->module, 'action', $log->action);
+                       $ldcache[$log->module][$log->action] = $ld;
+               }
+               if ($ld && !empty($log->info)) {
+                       // ugly hack to make sure fullname is shown correctly
+                       if (($ld->mtable == 'user') and ($ld->field == 'CONCAT(firstname," ",lastname)')) {
+                               $log->info = fullname(get_record($ld->mtable, 'id', $log->info), true);
+                       } else {
+                               $log->info = get_field($ld->mtable, $ld->field, 'id', $log->info);
+                       }
+               }
+
+               //Filter log->info 
+               $log->info = format_string($log->info);
+
+               $log->url  = strip_tags(urldecode($log->url));     // Some XSS protection
+               $log->info = strip_tags(urldecode($log->info));    // Some XSS protection
+               $log->url  = str_replace('&', '&amp;', $log->url); // XHTML compatibility
+
+               $firstField = $courses[$log->course];
+               $fullname = fullname($log, $isteacher);
+               $row = array($firstField, userdate($log->time, $strftimedatetime), $log->ip, $fullname, $log->module.' '.$log->action, $log->info);
+               $text = implode("\t", $row);
+               echo $text." \n";
+       }
+       return true;
+}
+
+
+function print_log_xls($course, $user, $date, $order='l.time DESC', $modname,
+                        $modid, $modaction, $groupid) {
+    
+    global $CFG;
+
+       require_once("$CFG->libdir/excellib.class.php");
+       
+       if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
+                       $modname, $modid, $modaction, $groupid)) {
+        return false;
+    }
+    
+    if ($course->id == SITEID) {
+        $courses[0] = '';
+        if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
+            foreach ($ccc as $cc) {
+                $courses[$cc->id] = $cc->shortname;
+            }
+        }
+    }
+       
+    $count=0;
+    $ldcache = array();
+    $tt = getdate(time());
+    $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
+
+    $strftimedatetime = get_string("strftimedatetime");
+    $isteacher = isteacher($course->id);
+
+       $nroPages = ceil(count($logs)/(EXCELROWS-FIRSTUSEDEXCELROW+1));
+       $filename = 'logs_'.userdate(time(),get_string('backupnameformat'),99,false);
+       $filename .= '.xls';
+    
+    $workbook = new MoodleExcelWorkbook('-');
+    $workbook->send($filename);
+    
+       $worksheet = array();
+       $headers = array(get_string('course'), get_string('time'), get_string('ip_address'),
+                                       get_string('fullname'), get_string('action'), get_string('info'));
+    
+       // Creating worksheets
+       for ($wsnumber = 1; $wsnumber <= $nroPages; $wsnumber++) {
+               $sheettitle = get_string('excel_sheettitle', 'logs', $wsnumber).$nroPages;
+               $worksheet[$wsnumber] =& $workbook->add_worksheet($sheettitle);
+               $worksheet[$wsnumber]->set_column(1, 1, 30);
+               $worksheet[$wsnumber]->write_string(0, 0, get_string('savedat').
+                                           userdate(time(), $strftimedatetime));
+               $col = 0;
+               foreach ($headers as $item) {
+                       $worksheet[$wsnumber]->write(FIRSTUSEDEXCELROW-1,$col,$item,'');
+                       $col++;
+               }
+       }
+
+       $formatDate =& $workbook->add_format();
+       $formatDate->set_num_format(get_string('log_excel_date_format'));
+
+       $row = FIRSTUSEDEXCELROW;
+       $wsnumber = 1;
+       $myxls =& $worksheet[$wsnumber];
+       foreach ($logs['logs'] as $log) {
+               if (isset($ldcache[$log->module][$log->action])) {
+                       $ld = $ldcache[$log->module][$log->action];
+               } else {
+                       $ld = get_record('log_display', 'module', $log->module, 'action', $log->action);
+                       $ldcache[$log->module][$log->action] = $ld;
+               }
+               if ($ld && !empty($log->info)) {
+                       // ugly hack to make sure fullname is shown correctly
+                       if (($ld->mtable == 'user') and ($ld->field == 'CONCAT(firstname," ",lastname)')) {
+                               $log->info = fullname(get_record($ld->mtable, 'id', $log->info), true);
+                       } else {
+                               $log->info = get_field($ld->mtable, $ld->field, 'id', $log->info);
+                       }
+               }
+
+               // Filter log->info
+               $log->info = format_string($log->info);
+               $log->info = strip_tags(urldecode($log->info));  // Some XSS protection
+
+               if ($nroPages>1) {
+                       if ($row > EXCELROWS) {
+                               $wsnumber++;
+                               $myxls =& $worksheet[$wsnumber];
+                               $row = FIRSTUSEDEXCELROW;
+                       }
+               }
+               
+               $myxls->write($row, 0, $courses[$log->course], '');
+               // Excel counts from 1/1/1900
+               $excelTime=25569+$log->time/(3600*24);
+               $myxls->write($row, 1, $excelTime, $formatDate);
+               $myxls->write($row, 2, $log->ip, '');
+               $fullname = fullname($log, $isteacher);
+               $myxls->write($row, 3, $fullname, '');
+               $myxls->write($row, 4, $log->module.' '.$log->action, '');
+               $myxls->write($row, 5, $log->info, '');
+       
+               $row++;
+       }
+
+       $workbook->close();
+       return true;
+}
+
+/*
+// Relies on $CFG->libdir.'/phpdocwriter/lib/include.php', which is not
+// included in the default Moodle distribution.
+
+function print_log_ooo($course, $user, $date, $order='l.time DESC', $modname,
+                        $modid, $modaction, $groupid) {    global $CFG;
+
+       require_once($CFG->libdir.'/phpdocwriter/lib/include.php');
+    
+    if (!$logs = build_logs_array($course, $user, $date, $order, '', '',
+                       $modname, $modid, $modaction, $groupid)) {
+        return false;
+    }
+    
+    if ($course->id == SITEID) {
+        $courses[0] = '';
+        if ($ccc = get_courses('all', 'c.id ASC', 'c.id,c.shortname')) {
+            foreach ($ccc as $cc) {
+                $courses[$cc->id] = $cc->shortname;
+            }
+        }
+    }
+    
+    $count=0;
+    $ldcache = array();
+    $tt = getdate(time());
+    $today = mktime (0, 0, 0, $tt["mon"], $tt["mday"], $tt["year"]);
+
+    $strftimedatetime = get_string("strftimedatetime");
+    $isteacher = isteacher($course->id);
+
+       $filename = 'logs_'.userdate(time(),get_string('backupnameformat'),99,false);
+       $filename .= '.sxw';
+       import('phpdocwriter.pdw_document');
+       header("Content-Type: application/download\n");
+       header("Content-Disposition: attachment; filename=$filename");
+       header("Expires: 0");
+       header("Cache-Control: must-revalidate,post-check=0,pre-check=0");
+       header("Pragma: public");
+       header("Content-Transfer-Encoding: binary");
+
+       $sxw = new pdw_document;
+       $sxw->SetFileName($filename);
+       $sxw->SetAuthor('Moodle');
+       $sxw->SetTitle('logs');
+       $sxw->SetDescription('logs'.' - '.$filename);
+       $sxw->SetLanguage('es','ES');
+       $sxw->SetStdFont("Times New Roman",12);
+       $sxw->AddPageDef(array('name'=>'Standard', 'margins'=>'1,1,1,1', 'w'=>'29.7', 'h'=>'21'));
+       $sxw->Write(get_string('savedat').userdate(time(), $strftimedatetime));
+    $sxw->Ln(3);
+    
+    $headers = array(get_string('course'), get_string('time'), get_string('ip_address'),
+                                       get_string('fullname'), get_string('action'), get_string('info'));
+    
+       foreach($headers as $key=>$header){
+               $headers[$key] = eregi_replace ("<br?>", " ",$header);
+       }
+
+       foreach ($logs['logs'] as $log) {
+               if (isset($ldcache[$log->module][$log->action])) {
+                       $ld = $ldcache[$log->module][$log->action];
+               } else {
+                       $ld = get_record('log_display', 'module', $log->module, 'action', $log->action);
+                       $ldcache[$log->module][$log->action] = $ld;
+               }
+               if ($ld && !empty($log->info)) {
+                       // ugly hack to make sure fullname is shown correctly
+                       if (($ld->mtable == 'user') and ($ld->field == 'CONCAT(firstname," ",lastname)')) {
+                               $log->info = fullname(get_record($ld->mtable, 'id', $log->info), true);
+                       } else {
+                               $log->info = get_field($ld->mtable, $ld->field, 'id', $log->info);
+                       }
+               }
+
+               // Filter log->info 
+               $log->info = format_string($log->info);
+
+               $log->url  = strip_tags(urldecode($log->url));     // Some XSS protection
+               $log->info = strip_tags(urldecode($log->info));    // Some XSS protection
+               $log->url  = str_replace('&', '&amp;', $log->url); // XHTML compatibility
+
+               $firstField = $courses[$log->course];
+               $fullname = fullname($log, $isteacher);
+               $row = array($firstField, userdate($log->time, $strftimedatetime), $log->ip, $fullname, $log->module.' '.$log->action, $log->info);
+
+               $data[] = $row;
+       }
+       $sxw->Table($headers,$data);
+       $sxw->Output();
+       
+       return true;
+}
+*/
+
 function print_log_graph($course, $userid=0, $type="course.png", $date=0) {
     global $CFG;
     if (empty($CFG->gdversion)) {
@@ -449,7 +731,6 @@ function print_overview($courses) {
 
     global $CFG, $USER;
 
-
     $htmlarray = array();
     if ($modules = get_records('modules')) {
         foreach ($modules as $mod) {
@@ -462,7 +743,6 @@ function print_overview($courses) {
             }
         }
     }
-
     foreach ($courses as $course) {
         print_simple_box_start('center', '100%', '', 5, "coursebox");
         $linkcss = '';
@@ -480,7 +760,6 @@ function print_overview($courses) {
 }
 
 
-
 function print_recent_activity($course) {
     // $course is an object
     // This function trawls through the logs looking for
@@ -1876,4 +2155,4 @@ function move_courses ($courseids, $categoryid) {
     return true;
 }
 
-?>
+?>
\ No newline at end of file
index 850cc80f51ec53538799892a8bff2404ea374394..45464218d6e95b84db4c9e1d296d0fc0858b8998 100644 (file)
     $modaction   = optional_param('modaction', '', PARAM_PATH); // an action as recorded in the logs
     $page        = optional_param('page', '0', PARAM_INT);     // which page to show
     $perpage     = optional_param('perpage', '100', PARAM_INT); // how many per page 
-    $showcourses = optional_param('showcourses',0,PARAM_INT); // whether to show courses if we're over our limit.
-    $showusers   = optional_param('showusers',0,PARAM_INT); // whether to show users if we're over our limit.
-    $chooselog   = optional_param('chooselog',0,PARAM_INT);
+    $showcourses = optional_param('showcourses', 0, PARAM_INT); // whether to show courses if we're over our limit.
+    $showusers   = optional_param('showusers', 0, PARAM_INT); // whether to show users if we're over our limit.
+    $chooselog   = optional_param('chooselog', 0, PARAM_INT);
+    $logformat   = optional_param('logformat', 'showashtml', PARAM_ALPHA);
 
     require_login();
 
         if ($date) {
             $dateinfo = userdate($date, get_string('strftimedaydate'));
         }
-
-        if ($course->category) {
-            print_header($course->shortname .': '. $strlogs, $course->fullname, 
-                         "<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a> ->
-                          <a href=\"$CFG->wwwroot/course/report.php?id=$course->id\">$strreports</a> ->
-                          <a href=\"index.php?id=$course->id\">$strlogs</a> -> $userinfo, $dateinfo", '');
-        } else {
-            print_header($course->shortname .': '. $strlogs, $course->fullname, 
-                         "<a href=\"$CFG->wwwroot/$CFG->admin/index.php\">$stradministration</a> ->
-                          <a href=\"$CFG->wwwroot/$CFG->admin/report.php\">$strreports</a> ->
-                          <a href=\"index.php?id=$course->id\">$strlogs</a> -> $userinfo, $dateinfo", '');
-        }
         
-        print_heading("$course->fullname: $userinfo, $dateinfo (".usertimezone().")");
+        switch ($logformat) {
+            case 'showashtml':
+                if ($course->category) {
+                    print_header($course->shortname .': '. $strlogs, $course->fullname, 
+                                 "<a href=\"$CFG->wwwroot/course/view.php?id=$course->id\">$course->shortname</a> ->
+                                  <a href=\"$CFG->wwwroot/course/report.php?id=$course->id\">$strreports</a> ->
+                                  <a href=\"index.php?id=$course->id\">$strlogs</a> -> $userinfo, $dateinfo", '');
+                } else {
+                    print_header($course->shortname .': '. $strlogs, $course->fullname, 
+                                 "<a href=\"$CFG->wwwroot/$CFG->admin/index.php\">$stradministration</a> ->
+                                  <a href=\"$CFG->wwwroot/$CFG->admin/report.php\">$strreports</a> ->
+                                  <a href=\"index.php?id=$course->id\">$strlogs</a> -> $userinfo, $dateinfo", '');
+                }
+
+                print_heading("$course->fullname: $userinfo, $dateinfo (".usertimezone().")");
+                print_log_selector_form($course, $user, $date, $modname, $modid, $modaction, $group, $showcourses, $showusers, $logformat);
+                
+                print_log($course, $user, $date, 'l.time DESC', $page, $perpage, 
+                        "index.php?id=$course->id&amp;chooselog=1&amp;user=$user&amp;date=$date&amp;modid=$modid&amp;modaction=$modaction&amp;group=$group", 
+                        $modname, $modid, $modaction, $group);
+                break;
+            case 'downloadascsv':
+                if (!print_log_csv($course, $user, $date, 'l.time DESC', $modname,
+                        $modid, $modaction, $group)) {
+                    notify("No logs found!");
+                    print_footer($course);
+                }
+                exit;
+            case 'downloadasexcel':
+                if (!print_log_xls($course, $user, $date, 'l.time DESC', $modname,
+                        $modid, $modaction, $group)) {
+                    notify("No logs found!");
+                    print_footer($course);
+                }
+                exit;
+            case 'downloadasooo':
+                if (!print_log_ooo($course, $user, $date, 'l.time DESC', $modname,
+                        $modid, $modaction, $group)) {
+                    notify("No logs found!");
+                    print_footer($course);
+                }
+                exit;
+        }
 
-        print_log_selector_form($course, $user, $date, $modname, $modid, $modaction, $group, $showcourses, $showusers);
-        
-        print_log($course, $user, $date, 'l.time DESC', $page, $perpage, 
-                  "index.php?id=$course->id&amp;chooselog=1&amp;user=$user&amp;date=$date&amp;modid=$modid&amp;modaction=$modaction&amp;group=$group", 
-                  $modname, $modid, $modaction, $group);
 
     } else {
         if ($course->category) {
 
         print_heading(get_string('chooselogs') .':');
 
-        print_log_selector_form($course, $user, $date, $modname, $modid, $modaction, $group, $showcourses, $showusers);
+        print_log_selector_form($course, $user, $date, $modname, $modid, $modaction, $group, $showcourses, $showusers, $logformat);
 
         echo '<br />';
         print_heading(get_string('chooselivelogs') .':');
     print_footer($course);
 
     exit;
-
-?>
+?>
\ No newline at end of file
index bb320956b67f8d9eb7961ff2cbbac0c81831ac3d..b29010fa564c056120469444ff9d268becdfbcf4 100644 (file)
@@ -1,7 +1,7 @@
 <?php  // $Id$
 
-function print_log_selector_form($course, $selecteduser=0, $selecteddate="today",
-                                 $modname="", $modid=0, $modaction="", $selectedgroup=-1,$showcourses=0,$showusers=0) {
+function print_log_selector_form($course, $selecteduser=0, $selecteddate='today',
+                                 $modname="", $modid=0, $modaction='', $selectedgroup=-1, $showcourses=0, $showusers=0, $logformat='showashtml') {
 
     global $USER, $CFG;
 
@@ -193,7 +193,7 @@ function print_log_selector_form($course, $selecteduser=0, $selecteddate="today"
         else {
             $users[0] = get_string('allparticipants');
         }
-        choose_from_menu($users,'user',$selecteduser,false);
+        choose_from_menu($users, 'user', $selecteduser, false);
         $a->url = "$CFG->wwwroot/course/report/log/index.php?chooselog=0&group=$selectedgroup&user=$selecteduser"
             ."&id=$course->id&date=$selecteddate&modid=$selectedactivity&showusers=1&showcourses=$showcourses";
         print_string('logtoomanyusers','moodle',$a);
@@ -201,9 +201,20 @@ function print_log_selector_form($course, $selecteduser=0, $selecteddate="today"
     choose_from_menu ($dates, "date", $selecteddate, get_string("alldays"));
     choose_from_menu ($activities, "modid", $selectedactivity, get_string("allactivities"), "", "");
     choose_from_menu ($actions, 'modaction', $modaction, get_string("allactions"));
-    echo '<input type="submit" value="'.get_string('showtheselogs').'" />';
+    
+    $logformats = array('showashtml' => get_string('displayonpage'),
+                        'downloadascsv' => get_string('downloadtext'),
+                        'downloadasexcel' => get_string('downloadexcel'));
+    /*
+    $logformats = array('showashtml' => get_string('displayonpage'),
+                        'downloadascsv' => get_string('downloadtext'),
+                        'downloadasexcel' => get_string('downloadexcel'),
+                        'downloadasooo' => get_string('downloadasooo'));
+    */
+    choose_from_menu ($logformats, 'logformat', $logformat, false);
+    echo '<input type="submit" value="'.get_string('gettheselogs').'" />';
     echo "</form>";
     echo "</center>";
 }
 
-?>
+?>
\ No newline at end of file