DataObjects/core.sql
[Pman.Core] / SimpleExcel.php
index 09093e1..c94c45f 100644 (file)
@@ -2,6 +2,11 @@
 
 /**
  * class to generate excel file from rows of data, and a configuration.
+ *
+ * usage :
+ *   $x = new Pman_Core_SimpleExcel(array())
+ *   $x->send($fn);
+ *
  * 
  * cfg:
  *     formats 
  *          
  *     workbook : nameof
  *
- *     headdata : [
+ *     head  : [
             [ "a", "b" ]
-            
-            e : f
-        ]
+            [],
+            [ "A", "B" ]
+        ],
  *     cols :  array(
             array(
                 'header'=> "Thumbnail",
@@ -94,12 +99,18 @@ class Pman_Core_SimpleExcel extends Pman
             $worksheet->setColumn ( $c, $c, $col_cfg['width'] / 5);
              
         }
+        $start_row++;
+        $hasRender  = false;
            //     DB_DataObject::debugLevel(1);
-        foreach($data as $r=>$cl) {
+        foreach($data as $r=>$clo) {
+            $cl = $clo;
+            if (is_object($clo)) {
+                $cl = (array)$clo; // lossless converstion..
+            }
             
             if (isset($cfg['row_height'])) {
-                $worksheet->setRow($start_row +1, $cfg['row_height']);
-               }
+                $worksheet->setRow($start_row +$r, $cfg['row_height']);
+            }
             
             foreach($cfg['cols']  as $c=>$col_cfg) {
                 $v = isset($cl[$col_cfg['dataIndex']]) ? $cl[$col_cfg['dataIndex']] : '';
@@ -108,13 +119,14 @@ class Pman_Core_SimpleExcel extends Pman
                 }
                 if (isset($col_cfg['txtrenderer'])) {
                     $v = call_user_func($col_cfg['txtrenderer'], 
-                            $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
+                            $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $clo);
                     if ($v === false) {
                         continue;
                     }
                   //  var_dump($v);
                 }
                 if (isset($col_cfg['renderer'])) {
+                    $hasRender = true;
                     continue;
                 }
                 
@@ -122,26 +134,45 @@ class Pman_Core_SimpleExcel extends Pman
                 $format = isset($col_cfg['format']) ? $formats[$col_cfg['format']] : false;
                 
           //    echo "<PRE>WRITE: ". htmlspecialchars(print_r(array($r+1, $c,$v), true));
-                $worksheet->write($start_row+1, $c, $v, $format);
+                $worksheet->write($start_row+$r, $c, $v, $format);
             }
         }
-        
-        foreach($data as $r=>$cl) {
-        
-            foreach($cfg['cols']   as $c=>$col_cfg) {
-                $v = isset($cl[$col_cfg['dataIndex']]) ? $cl[$col_cfg['dataIndex']] : '';
-                if (empty($cl[$col_cfg['dataIndex']])) {
-                    continue;
+        /// call user render on any that are defined..
+        if ($hasRender) {
+            foreach($data as $r=>$cl) {
+            
+                foreach($cfg['cols']   as $c=>$col_cfg) {
+                    $v = isset($cl[$col_cfg['dataIndex']]) ? $cl[$col_cfg['dataIndex']] : '';
+                    if (empty($cl[$col_cfg['dataIndex']])) {
+                        continue;
+                    }
+                    if (isset($col_cfg['renderer'])) {
+                        call_user_func($col_cfg['renderer'], $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
+                        
+                    }
+                  //  echo "<PRE>WRITE: ". htmlspecialchars(print_r(array($r+1, $c, $cl[$col_cfg['dataIndex']]), true));
+             
                 }
-                if (isset($col_cfg['renderer'])) {
-                    call_user_func($col_cfg['renderer'], $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
+            }
+        }
+        $start_row += count($data);
+        
+        if (!empty($cfg['foot'])) {
+            foreach($cfg['foot'] as $row) { 
+                foreach($row as $c => $col) {
+                    // if it's an array? - formated ???
+                    $worksheet->write($start_row, $c, $col);
                     
                 }
-              //  echo "<PRE>WRITE: ". htmlspecialchars(print_r(array($r+1, $c, $cl[$col_cfg['dataIndex']]), true));
-         
+                $start_row++;
             }
+            // add a spacer..
+            $start_row++;
         }
-           $workbook->close();
+            
+        
+        
+        $workbook->close();
         $this->outfile2 = $outfile2;
          
     }