]> git.mjollnir.org Git - moodle.git/commitdiff
MDL-7996 Add ods export support - added changing of column width
authorskodak <skodak>
Fri, 22 Dec 2006 10:04:50 +0000 (10:04 +0000)
committerskodak <skodak>
Fri, 22 Dec 2006 10:04:50 +0000 (10:04 +0000)
lib/odslib.class.php

index 300b9a9d97af7ee79f934c1960b1bbea07aeed60..5ddfd0f15d134ed9fb3d4bac54d09da31250f42c 100644 (file)
@@ -58,7 +58,7 @@ class MoodleODSWorkbook {
      *                          i.e: [bold]=1 for set_bold(1)...Optional!
      */
     function &add_format($properties = array()) {
-        $format = new MoodleODSFormat($this, $properties);
+        $format = new MoodleODSFormat($properties);
         return $format;;
     }
 
@@ -117,6 +117,8 @@ class MoodleODSWorkbook {
 
 class MoodleODSWorksheet {
     var $data = array();
+    var $columns = array();
+    var $rows = array();
     var $name;
 
 
@@ -246,7 +248,7 @@ class MoodleODSWorksheet {
      * @param bool    $hidden The optional hidden attribute
      * @param integer $level  The optional outline level (0-7)
      */
-    function set_row ($row, $height, $format = 0, $hidden = false, $level = 0) {
+    function set_row($row, $height, $format = 0, $hidden = false, $level = 0) {
         //not defined yet
     }
 
@@ -258,25 +260,30 @@ class MoodleODSWorksheet {
      * @param integer $hidden   The optional hidden atribute
      * @param integer $level    The optional outline level (0-7)
      */
-    function set_column ($firstcol, $lastcol, $width, $format = 0, $hidden = false, $level = 0) {
-        //not defined yet
+    function set_column($firstcol, $lastcol, $width, $format = 0, $hidden = false, $level = 0) {
+        for($i=$firstcol; $i<=$lastcol; $i++) {
+            $this->columns[$i] = new object();
+            $this->columns[$i]->width = $width;
+        }
     }
 
 }
 
 /**
 * Define and operate over one Format.
-*
-* A big part of this class acts as a wrapper over the PEAR
-* Spreadsheet_Excel_Writer_Workbook and OLE libraries
-* maintaining Moodle functions isolated from underlying code.
 */
 class MoodleODSFormat {
+    var $formatid;
+    var $properties;
 
     /* Constructs one Moodle Format.
      * @param object $workbook The internal PEAR Workbook onject we are creating
      */
-    function MoodleODSFormat(&$workbook, $properties = array()) {
+    function MoodleODSFormat($properties = array()) {
+        static $fid = 1;
+       
+        $this->properties = $properties; 
+        $this->formatid = $fid++;
     }
 
     /* Set weight of the format
@@ -424,7 +431,19 @@ function get_ods_content(&$worksheets) {
   <style:style style:name="ta1" style:family="table" style:master-page-name="Standard1">
    <style:table-properties table:display="true"/>
   </style:style>
-  <style:style style:name="date0" style:family="table-cell"/>
+  <style:style style:name="date0" style:family="table-cell"/>';
+
+    //define all needed styles
+    foreach($worksheets as $ws) {
+        foreach($ws->columns as $ckey=>$col) {
+            $buffer .= '
+  <style:style style:name="co'.$ckey.'" style:family="table-column">
+   <style:table-column-properties style:column-width="'.$col->width.'pt"/>
+  </style:style>';
+        }
+    }
+
+ $buffer .= '
  </office:automatic-styles>
  <office:body>
   <office:spreadsheet>
@@ -433,24 +452,40 @@ function get_ods_content(&$worksheets) {
     foreach($worksheets as $ws) {
 
     /// worksheet header
-        $buffer .= '<table:table table:name="' . htmlspecialchars($ws->name) . '" table:style-name="ta1">'."\n".' <table:table-column/>'."\n";
+        $buffer .= '<table:table table:name="' . htmlspecialchars($ws->name) . '" table:style-name="ta1">'."\n";
 
-        $nr = 0;
-        $nc = 0;
+        $maxr = 0;
+        $maxc = 0;
         foreach($ws->data as $rkey=>$row) {
-            if ($rkey > $nr) {
-                $nr = $rkey;
+            if ($rkey > $maxr) {
+                $maxr = $rkey;
             }
             foreach($row as $ckey=>$col) {
-                if ($ckey > $nc) {
-                    $nc = $ckey;
+                if ($ckey > $maxc) {
+                    $maxc = $ckey;
                 }
             }
         }
 
-        for($r=0; $r<=$nr; $r++) {
+        foreach($ws->columns as $ckey=>$col) {
+            if ($ckey > $maxc) {
+                $maxc = $ckey;
+            }
+        }
+
+        // define column properties
+        for($c=0; $c<=$maxc; $c++) {
+            if (!empty($ws->columns[$c])) {
+                $buffer .= '<table:table-column table:style-name="co'.$c.'"/>'."\n";
+            } else {
+                $buffer .= '<table:table-column/>'."\n";
+            }
+        }
+
+        // print all rows
+        for($r=0; $r<=$maxr; $r++) {
             $buffer .= '<table:table-row>'."\n";
-            for($c=0; $c<=$nc; $c++) {
+            for($c=0; $c<=$maxc; $c++) {
                 if (isset($ws->data[$r][$c])) {
                     if ($ws->data[$r][$c]->type == 'date') {
                         $buffer .= '<table:table-cell office:value-type="date" table:style-name="date0" office:date-value="' . strftime('%Y-%m-%dT%H:%M:%S', $ws->data[$r][$c]->value) . '">'