]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - lib/WikiDB/adodb/toexport.inc.php
Upgrade adodb
[SourceForge/phpwiki.git] / lib / WikiDB / adodb / toexport.inc.php
1 <?php
2
3 /** 
4  * @version V4.93 10 Oct 2006 (c) 2000-2012 John Lim (jlim#natsoft.com). All rights reserved.
5  * Released under both BSD license and Lesser GPL library license. 
6  * Whenever there is any discrepancy between the two licenses, 
7  * the BSD license will take precedence. 
8  *
9  * Code to export recordsets in several formats:
10  *
11  * AS VARIABLE
12  * $s = rs2csv($rs); # comma-separated values
13  * $s = rs2tab($rs); # tab delimited
14  * 
15  * TO A FILE
16  * $f = fopen($path,'w');
17  * rs2csvfile($rs,$f);
18  * fclose($f);
19  *
20  * TO STDOUT
21  * rs2csvout($rs);
22  */
23  
24 // returns a recordset as a csv string
25 function rs2csv(&$rs,$addtitles=true)
26 {
27         return _adodb_export($rs,',',',',false,$addtitles);
28 }
29
30 // writes recordset to csv file 
31 function rs2csvfile(&$rs,$fp,$addtitles=true)
32 {
33         _adodb_export($rs,',',',',$fp,$addtitles);
34 }
35
36 // write recordset as csv string to stdout
37 function rs2csvout(&$rs,$addtitles=true)
38 {
39         $fp = fopen('php://stdout','wb');
40         _adodb_export($rs,',',',',true,$addtitles);
41         fclose($fp);
42 }
43
44 function rs2tab(&$rs,$addtitles=true)
45 {
46         return _adodb_export($rs,"\t",',',false,$addtitles);
47 }
48
49 // to file pointer
50 function rs2tabfile(&$rs,$fp,$addtitles=true)
51 {
52         _adodb_export($rs,"\t",',',$fp,$addtitles);
53 }
54
55 // to stdout
56 function rs2tabout(&$rs,$addtitles=true)
57 {
58         $fp = fopen('php://stdout','wb');
59         _adodb_export($rs,"\t",' ',true,$addtitles);
60         if ($fp) fclose($fp);
61 }
62
63 function _adodb_export(&$rs,$sep,$sepreplace,$fp=false,$addtitles=true,$quote = '"',$escquote = '"',$replaceNewLine = ' ')
64 {
65         if (!$rs) return '';
66         //----------
67         // CONSTANTS
68         $NEWLINE = "\r\n";
69         $BUFLINES = 100;
70         $escquotequote = $escquote.$quote;
71         $s = '';
72         
73         if ($addtitles) {
74                 $fieldTypes = $rs->FieldTypesArray();
75                 reset($fieldTypes);
76                 $i = 0;
77                 while(list(,$o) = each($fieldTypes)) {
78                 
79                         $v = ($o) ? $o->name : 'Field'.($i++);
80                         if ($escquote) $v = str_replace($quote,$escquotequote,$v);
81                         $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v))));
82                         $elements[] = $v;
83                         
84                 }
85                 $s .= implode($sep, $elements).$NEWLINE;
86         }
87         $hasNumIndex = isset($rs->fields[0]);
88         
89         $line = 0;
90         $max = $rs->FieldCount();
91         
92         while (!$rs->EOF) {
93                 $elements = array();
94                 $i = 0;
95                 
96                 if ($hasNumIndex) {
97                         for ($j=0; $j < $max; $j++) {
98                                 $v = $rs->fields[$j];
99                                 if (!is_object($v)) $v = trim($v);
100                                 else $v = 'Object';
101                                 if ($escquote) $v = str_replace($quote,$escquotequote,$v);
102                                 $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v))));
103                                 
104                                 if (strpos($v,$sep) !== false || strpos($v,$quote) !== false) $elements[] = "$quote$v$quote";
105                                 else $elements[] = $v;
106                         }
107                 } else { // ASSOCIATIVE ARRAY
108                         foreach($rs->fields as $v) {
109                                 if ($escquote) $v = str_replace($quote,$escquotequote,trim($v));
110                                 $v = strip_tags(str_replace("\n", $replaceNewLine, str_replace("\r\n",$replaceNewLine,str_replace($sep,$sepreplace,$v))));
111                                 
112                                 if (strpos($v,$sep) !== false || strpos($v,$quote) !== false) $elements[] = "$quote$v$quote";
113                                 else $elements[] = $v;
114                         }
115                 }
116                 $s .= implode($sep, $elements).$NEWLINE;
117                 $rs->MoveNext();
118                 $line += 1;
119                 if ($fp && ($line % $BUFLINES) == 0) {
120                         if ($fp === true) echo $s;
121                         else fwrite($fp,$s);
122                         $s = '';
123                 }
124         }
125         
126         if ($fp) {
127                 if ($fp === true) echo $s;
128                 else fwrite($fp,$s);
129                 $s = '';
130         }
131         
132         return $s;
133 }
134 ?>