瀏覽代碼

Fix export gradebook results to docx - refs #8218

Angel Fernando Quiroz Campos 8 年之前
父節點
當前提交
52e3a414bf
共有 2 個文件被更改,包括 25 次插入48 次删除
  1. 2 1
      main/gradebook/gradebook_flatview.php
  2. 23 47
      main/gradebook/lib/gradebook_result.class.php

+ 2 - 1
main/gradebook/gradebook_flatview.php

@@ -247,8 +247,9 @@ if (!empty($_GET['export_report']) &&
                 ob_start();
                 $export = new GradeBookResult();
                 $export->exportCompleteReportDOC($printable_data);
+                $content = ob_get_contents();
                 ob_end_clean();
-                exit;
+                echo $content;
                 break;
             case 'csv':
             default:

+ 23 - 47
main/gradebook/lib/gradebook_result.class.php

@@ -116,58 +116,34 @@ class GradeBookResult
 
     /**
      * Exports the complete report as a DOCX file
-     * @return	boolean		False on error
+     * @param $data The table data
+     * @return bool
      */
     public function exportCompleteReportDOC($data)
     {
-        $_course = api_get_course_info();
-        $filename = 'gb_results_'.$_course['code'].'_'.gmdate('YmdGis');
-        $filepath = api_get_path(SYS_ARCHIVE_PATH).$filename;
-        require_once api_get_path(LIBRARY_PATH).'phpdocx/classes/CreateDocx.inc';
-        $docx = new CreateDocx();
-        $paramsHeader = array(
-            'font' => 'Courrier',
-            'jc' => 'left',
-            'textWrap' => 5,
-        );
-        $docx->addHeader(get_lang('FlatView'), $paramsHeader);
-        $params = array(
-            'font' => 'Courrier',
-            'border' => 'single',
-            'border_sz' => 20
-        );
-        $lines = 0;
-        $values[] = implode("\t",$data[0]);
-        foreach ($data[1] as $line) {
-            $values[] = implode("\t",$line);
-            $lines++;
+        $filename = 'gradebook_results_'.api_get_local_time() . '.docx';
+
+        $doc = new \PhpOffice\PhpWord\PhpWord();
+        $section = $doc->addSection(['orientation' => 'landscape']);
+        $table = $section->addTable();
+        $table->addRow();
+
+        for ($i = 0; $i < count($data[0]); $i++) {
+            $table->addCell(1750)->addText(strip_tags($data[0][$i]));
         }
-        //$data = array();
-        //$docx->addTable($data, $params);
-        $docx->addList($values, $params);
-        //$docx->addFooter('', $paramsHeader);
-        $paramsPage = array(
-            //    'titlePage' => 1,
-            'orient' => 'landscape',
-            //    'top' => 4000,
-            //    'bottom' => 4000,
-            //    'right' => 4000,
-            //    'left' => 4000
-        );
-        $docx->createDocx($filepath,$paramsPage);
-        //output the results
-        $data = file_get_contents($filepath.'.docx');
-        $len = strlen($data);
-        //header("Content-type: application/vnd.ms-word");
-        header('Content-type: application/vnd.openxmlformats-officedocument.wordprocessingml.document');
-        //header('Content-Type: application/force-download');
-        header('Content-length: '.$len);
-        header("Content-Disposition: attachment; filename=\"$filename.docx\"");
-        header('Expires: 0');
-        header('Cache-Control: must-revalidate, post-check=0,pre-check=0');
-        header('Pragma: public');
-        echo $data;
 
+        foreach ($data[1] as $dataLine) {
+            $table->addRow();
+
+            for ($i = 0; $i < count($dataLine); $i++) {
+                $table->addCell(1750)->addText(strip_tags($dataLine[$i]));
+            }
+        }
+
+        $file = api_get_path(SYS_ARCHIVE_PATH) . api_replace_dangerous_char($filename);
+        $doc->save($file, 'Word2007');
+
+        DocumentManager::file_send_for_download($file, true, $filename);
         return true;
     }
 }