File:
0.01.1a/core/XML.php (
View as Code)
1: 2: /* -------------------------------------------------------------
3: This file is part of FreeDESK
4:
5: FreeDESK is (C) Copyright 2012 David Cutting
6:
7: FreeDESK is free software: you can redistribute it and/or modify
8: it under the terms of the GNU General Public License as published by
9: the Free Software Foundation, either version 3 of the License, or
10: (at your option) any later version.
11:
12: FreeDESK is distributed in the hope that it will be useful,
13: but WITHOUT ANY WARRANTY; without even the implied warranty of
14: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15: GNU General Public License for more details.
16:
17: You should have received a copy of the GNU General Public License
18: along with FreeDESK. If not, see www.gnu.org/licenses
19:
20: For more information see www.purplepixie.org/freedesk/
21: -------------------------------------------------------------- */
22:
23: /**
24: * Main xmlCreate class object
25: */
26: class xmlCreate
27: {
28:
29: /**
30: * Contains XML Output
31: */
32: var $xml = "";
33:
34: /**
35: * Contains open tags
36: * Not yet implemented
37: */
38: var $open_tags = array();
39:
40: /**
41: * Contains Depth of Elements
42: */
43: var $depth = 0;
44:
45: /**
46: * Control the depth (variance)
47: * @param integer $varience What to alter the depth by
48: */
49: function setDepth($varience)
50: {
51: $this->depth += $varience;
52: }
53:
54: /**
55: * Pad to depth
56: */
57: function pad()
58: {
59: if ($this->depth<1) return "";
60: return str_pad("",$this->depth," ");
61: }
62:
63: /**
64: * Start building an open-ended XML element
65: * @param string $element Name of the element
66: * @param array $vars Optional array of key values to use (or int 0 to skip)
67: * @param boolean $single Optional indicator of single element if true
68: * @param boolean $newline Optional insert newline at the end
69: */
70: function startElement($element,$vars=0,$single=false,$newline=true)
71: {
72: $this->xml.=$this->pad();
73: $this->xml.="<".$element;
74: if ( ($vars!=0) && (is_array($vars)) )
75: {
76: foreach($vars as $key => $val)
77: {
78: $this->xml.=" ".$key."=\"".$val."\"";
79: }
80: }
81: if ($single) $this->xml.=" /";
82: $this->xml.=">";
83: if ($newline) $this->xml.="\n";
84: if (!$single) $this->setDepth(1);
85: }
86:
87:
88: /**
89: * End an open-ended XML element
90: * @param string $element Name of the element
91: * @param boolean $pad Optional use padding (default true)
92: */
93: function endElement($element,$pad=true)
94: {
95: $this->setDepth(-1);
96: if ($pad) $this->xml.=$this->pad();
97: $this->xml.="".$element.">\n";
98: }
99:
100: /**
101: * Insert data (textual/char data)
102: * @param string $data Actual data to insert
103: * @param boolean $cdata Wrap with CDATA (optional, default NO)
104: * @param boolean $htmlcode Use HTML special characters (optional, default NO)
105: * @param boolean $newline Insert newline after data (optional, default YES)
106: */
107: function charData($data, $cdata=false, $htmlcode=false, $newline=true)
108: {
109: $dataline="";
110: if ($cdata) $dataline.="111: if ($htmlcode) $data=htmlspecialchars($data);
112: $dataline.=$data;
113: if ($cdata) $dataline.="]]>";
114: if ($newline) $dataline.="\n";
115: $this->xml.=$dataline;
116: }
117:
118: /**
119: * Single element wrapper for (@link startElement)
120: * @param string $element Element Name
121: * @param array $vars Optional variable array
122: */
123: function singleElement($element,$vars=0)
124: {
125: $this->startElement($element,$vars,true);
126: }
127:
128: /**
129: * Single char-element wrapper
130: * @param string $element Element Name
131: * @param string $data Element Data Content
132: * @param array $vars Optional array element variables (int 0 to skip)
133: * @param boolean $htmlchars Optional convert data to html special chars (default false)
134: * @param boolean $cdata Optional enclose char data in CDATA block (default false)
135: */
136: function charElement($element,$data,$vars=0,$htmlchars=false,$cdata=false)
137: {
138: $this->startElement($element,$vars,false,false);
139: $this->charData($data,$cdata,$htmlchars,false);
140: $this->endElement($element,false);
141: }
142:
143: /**
144: * Returns XML Buffer
145: * @param boolean $header Show an xml header (optional, default NO)
146: * @param boolean $html Convert to HTML-friendly output (optional, default NO)
147: * @param string $head_version XML Header version if shown (optional, default 1.0)
148: * @param string $head_encode XML encoding in header if shown (optional, default utf-8)
149: * @return string XML Output
150: */
151: function getXML($header=false,$html=false,$head_version="1.0",$head_encode="utf-8")
152: {
153: $out="";
154: if ($header)
155: $out="\n";
156: $out.=$this->xml;
157: if ($html) $out=nl2br(htmlspecialchars($out));
158: return $out;
159: }
160:
161: /**
162: * Returns XML Header
163: * @param string $head_version XML Header version (optional, default 1.0)
164: * @param string $head_encode XML encoding (optional, default utf-8)
165: * @return string xml header
166: **/
167: static function getHeader($head_version="1.0",$head_encode="utf-8")
168: {
169: return "\n";
170: }
171:
172: /**
173: * Convert an array to XML
174: * @param array &$data Data array
175: * @param bool $cdata CData all values (optional, default true)
176: **/
177: function xmlArray(&$data, $cdata=true)
178: {
179: foreach($data as $key => $item)
180: {
181: if(is_array($item))
182: {
183: $this->startElement($key);
184: $this->xmlArray($item);
185: $this->endElement($key);
186: }
187: else
188: {
189: $this->charElement($key, $item, 0, false, $cdata);
190: }
191: }
192: }
193:
194:
195: /**
196: * Writes XML Buffer to Screen
197: * @param boolean $header Show an xml header (optional, default NO)
198: * @param boolean $html Convert to HTML-friendly output (optional, default NO)
199: * @param string $head_version XML Header version if shown (optional, default 1.0)
200: * @param string $head_encode XML encoding in header if shown (optional, default utf-8)
201: */
202: function echoXML($header=false,$html=false,$head_version="1.0",$head_encode="utf-8")
203: {
204: $out="";
205: if ($header) $out.="\n";
206: $out.=$this->xml;
207: if ($html) $out=nl2br(htmlspecialchars($out));
208: echo $out;
209: }
210:
211: /**
212: * Register ourselves with FreeDESK
213: * @param mixed $desk FreeDESK instance
214: **/
215: static function Exec(&$desk)
216: {
217: $desk->PluginManager->Register( new Plugin(
218: "XML Creator", "0.01", "Core", "XML" ));
219: }
220:
221: }
222: ?>
223: