DataObjects/Core_enum.php
[Pman.Core] / SimpleExcel.php
index 157eb93..6580e50 100644 (file)
@@ -4,42 +4,60 @@
  * class to generate excel file from rows of data, and a configuration.
  *
  * usage :
- *   $x = new Pman_Core_SimpleExcel(array())
+ *   $x = new Pman_Core_SimpleExcel($data_array, array())
  *   $x->send($fn);
  *
  * 
- * cfg:
- *     formats 
- *          name : [ Align : left, .... ]
- *          
- *     workbook : nameof
  *
- *     head  : [
-            [ "a", "b" ]
-            [],
-            [ "A", "B" ]
-            [ "a",  ["test", "left"]  ] << sub array [text, formatname]
-        ],
- *     merged_ranges : array(
- *                          array($first_row, $first_col, $last_row, $last_col),
- * *                        array($first_row, $first_col, $last_row, $last_col),
- *                      ),
- *     cols :  array(
+new Pman_Core_SimpleExcel($data_array, array(
+    'formats' => array(
+        'format_name' => array( 'Align' =>  'left' ), // etc...
+    ),
+    'workbook' => 'name_of_workbook'm
+    
+    'head' => array(
+        array ( 'this', 'is', 'the' , 'first', 'row'), 
+        array ( 'this', 'is', 'the' , 'seconde', 'row'),  // ... etc.
+        array (  array( 'string', 'format_name') , 'another cell') ,  // with formating..
+    ),
+   
+    'merged_ranges' => array(
+                           array($first_row, $first_col, $last_row, $last_col),
+                         array($first_row, $first_col, $last_row, $last_col),
+    ),
+    'cols' =>  array(
             array(
                 'header'=> "Thumbnail",
                 'dataIndex'=> 'id',
*              'dataFormat' => 'string' // to force a string..
               'dataFormat' => 'string' // to force a string..
                 'width'=>  75,
                 'renderer' => array($this, 'getThumb'),
- *              'color' => 'yellow', // set color for the cell which is a header element
- *              'fillBlank' => 'gray', // set the color for the cell which is a blank area
+                'txtrenderer' => function($value, $worksheet, $row, $col, $row_data) {
+                    return $value
+                },   // for text content...
+                'color' => 'yellow', // set color for the cell which is a header element
+                'fillBlank' => 'gray', // set the color for the cell which is a blank area
             ),
+            //..... and ther rows...
+    ),
+    
+    // if this is set then it will add a tab foreach one.
+    'workbooks' = array(
+            workbook => '....' // ???
+    ),
+    'leave_open' => false,  // if you call addrows?? later..
+            
+));
+
+    callbacks: renderer
+        
+        function($value, $worksheet, $row, $col, $row_data)
         
-        // if this is set then it will add a tab foreach one.
-        workbooks = array(
-            workbook ->
+        // callbacks : txtrenderer
+        function($value, $worksheet, $row, $col, $row_data)
+                        
             
-        'leave_open' => false  
             
  */
  
@@ -237,9 +255,14 @@ class Pman_Core_SimpleExcel extends Pman
                     if (empty($cl[$col_cfg['dataIndex']])) {
                         continue;
                     }
-                    if (isset($col_cfg['renderer'])) {
+                    if (!empty($col_cfg['renderer'])) {
+                        
+                        if (is_a($col_cfg['renderer'], 'Closure')) {
+                            $col_cfg['renderer']($cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
+                        } else {
                         // not sure if row is correct here...!!!?
-                        call_user_func($col_cfg['renderer'], $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $cl);
+                            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));
@@ -288,10 +311,14 @@ class Pman_Core_SimpleExcel extends Pman
             $worksheet->setRow($start_row +$r, $cfg['row_height']);
         }
         
-        foreach($cfg['cols']  as $c=>$col_cfg) {
+        $line_height = (isset($cfg['line_height'])) ? $cfg['line_height'] : 12;
+        $height = 0;
+        
+        foreach($cfg['cols']  as $c => $col_cfg) {
             
             if(isset($col_cfg['dataIndex']) && isset($cl[$col_cfg['dataIndex']])){
-                $v = $cl[$col_cfg['dataIndex']];
+                $v =    $cl[$col_cfg['dataIndex']]  ;
+                
             }else{
                 if(isset($col_cfg['fillBlank'])){
                     $worksheet->write($start_row+$r, $c, '', $formats[$col_cfg['fillBlank']]);
@@ -303,8 +330,14 @@ class Pman_Core_SimpleExcel extends Pman
                 continue;
             }
             if (isset($col_cfg['txtrenderer'])) {
-                $v = call_user_func($col_cfg['txtrenderer'], 
-                        $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $clo);
+                
+                 if (is_a($col_cfg['txtrenderer'], 'Closure')) {
+                     
+                    $v =     $col_cfg['txtrenderer']($cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $clo);
+                } else {
+                    $v = call_user_func($col_cfg['txtrenderer'], 
+                            $cl[$col_cfg['dataIndex']], $worksheet, $r+1, $c, $clo);
+                }
                 if ($v === false) {
                     continue;
                 }
@@ -315,11 +348,10 @@ class Pman_Core_SimpleExcel extends Pman
                 continue;
             }
             
-            $v = @iconv('UTF-8', 'UTF-8//IGNORE', $v);
+            $v = @iconv('UTF-8', 'UTF-8//TRANSLIT//IGNORE', $v);
             
             $dataFormat = empty($col_cfg['dataFormat']) ? '' : $col_cfg['dataFormat'];
-             ;
-            
+              
             
             $format = isset($col_cfg['format'])  && isset($formats[$col_cfg['format']] )   ? $formats[$col_cfg['format']] : false;
           //  print_R(array($start_row+$r, $c, $v, $format));exit;
@@ -327,29 +359,17 @@ class Pman_Core_SimpleExcel extends Pman
             if ( (is_numeric($v) &&  strlen($v) > 1 && substr($v,0,1) == '0' && substr($v,1,1) != '.') 
                     || 
                     $dataFormat == 'string' ) {
-                if($worksheet_name == 'event' && $start_row == 2 && $c == 1){
-                    $validator = $this->workbook->addValidator();
-//                    $validator->setList("a b c");
-                    $validator->_fixedList = 1;
-                    $validator->_type = 3;
-                    $validator->_incell=true;
-                    $validator->setFormula1('INDEX(B9:B10,MATCH(MAX(LEN(A6:A9)),LEN(A6:A9),0),1)');
-                    
-//                    $validator->setList('Q2:Q10');
-                    
-                    $this->worksheet->setValidation(2,1,2,1,$validator);
-                    $this->worksheet->_storeDataValidity();
-                    $this->start_row++;
-        
-                    return $hasRender;
-                }
-                
                 $worksheet->writeString($start_row+$r, $c, $v, $format);
-                
             } else {
           
                 $worksheet->write($start_row+$r, $c, $v, $format);
             }
+            
+            if(isset($col_cfg['autoHeight'])){
+                $vv = explode("\n", $v);
+                $height = MAX(count($vv) * $line_height, $height);;
+                $worksheet->setRow($start_row+$r, $height);
+            }
         }
         $this->start_row++;
         
@@ -365,10 +385,12 @@ class Pman_Core_SimpleExcel extends Pman
         }
         
         require_once 'File/Convert.php';
+        //var_Dump($this->outfile2);
         $fc=  new File_Convert($this->outfile2, "application/vnd.ms-excel");
-        $fn = $fc->convert("application/vnd.ms-excel"); 
+        $fn = $fc->convert("application/vnd.ms-excel");
+        //print_r($fc);
         $fc->serve('attachment',$fname); // can fix IE Mess
     }
      
     
-}
\ No newline at end of file
+}