r433: Merging the locale-change branch onto trunk; we now use ISSO's localize system
[bugdar.git] / includes / class_xml_language.php
1 <?php
2 /*=====================================================================*\
3 || ################################################################### ||
4 || # BugSrike [#]version[#]
5 || # --------------------------------------------------------------- # ||
6 || # Copyright ©2002-[#]year[#] by Iris Studios, Inc. All Rights Reserved. # ||
7 || # This file may not be reproduced in any way without permission. # ||
8 || # --------------------------------------------------------------- # ||
9 || # User License Agreement at http://www.iris-studios.com/license/ # ||
10 || ################################################################### ||
11 \*=====================================================================*/
12
13 class XML_Language
14 {
15 var $path;
16 var $xmldata;
17
18 var $phrases;
19 var $languageinfo;
20 var $master = false;
21
22 var $languageid = 0;
23
24 // -------------------------------------------------------------------
25 // -- Loads XML data
26 // -------------------------------------------------------------------
27 function load()
28 {
29 if (empty($this->path) AND empty($this->xmldata))
30 {
31 return false;
32 }
33
34 if (!empty($this->path))
35 {
36 if (($fdata = @file_get_contents($this->path)) !== false)
37 {
38 $this->xmldata = $fdata;
39 return true;
40 }
41 else
42 {
43 return false;
44 }
45 }
46 else
47 {
48 return true;
49 }
50 }
51
52 // -------------------------------------------------------------------
53 // -- Parses the XML data
54 // -------------------------------------------------------------------
55 function parse()
56 {
57 global $bugsys;
58
59 if (empty($this->xmldata))
60 {
61 return false;
62 }
63
64 $this->phrases = array();
65 $this->languageinfo = array();
66
67 if (!$bugsys->is_loaded('xml'))
68 {
69 $bugsys->load('xml');
70 }
71
72 $data = $bugsys->xml->parse($this->xmldata);
73
74 foreach ($data AS $tag)
75 {
76 if ($tag['tagname'] == 'language')
77 {
78 $this->languageinfo = $tag['attributes'];
79 if ($this->languageinfo['MASTER'] == 'MASTER')
80 {
81 $this->master = true;
82 unset($this->languageinfo['MASTER']);
83 }
84 }
85 else if ($tag['tagname'] == 'phrase')
86 {
87 $this->phrases[ $tag['attributes']['name'] ] = $tag['data'];
88 }
89 }
90 }
91
92 // -------------------------------------------------------------------
93 // -- Returns a query that creates a language
94 // -------------------------------------------------------------------
95 function language()
96 {
97 global $bugsys;
98
99 $query = "
100 INSERT INTO " . TABLE_PREFIX . "language
101 (title, languagecode, charset, direction, default, userselect)
102 VALUES
103 ('" . $bugsys->escape($this->languageinfo['title']) . "',
104 '" . $bugsys->escape($this->languageinfo['languagecode']) . "',
105 '" . $bugsys->escape($this->languageinfo['charset']) . "',
106 '" . $bugsys->escape($this->languageinfo['direction']) . "', 0, 0
107 )";
108
109 return $query;
110 }
111
112 // -------------------------------------------------------------------
113 // -- Constructs the MySQL query to insert phrases
114 // -------------------------------------------------------------------
115 function build()
116 {
117 global $bugsys;
118
119 if ($this->master)
120 {
121 $query = "
122 INSERT INTO " . TABLE_PREFIX . "phrase
123 (varname, phrasetext, imported)
124 VALUES";
125
126 foreach ($this->phrases AS $name => $text)
127 {
128 $querybuild[] = "
129 ('" . $bugsys->escape($name) . "', '" . $bugsys->escape($text) . "', " . time() . ")";
130 }
131
132 $query .= implode(',', $querybuild);
133 }
134 else
135 {
136 if (!$this->languageid)
137 {
138 return false;
139 }
140
141 $query = "
142 INSERT INTO " . TABLE_PREFIX . "locale
143 (languageid, varname, phrasetext)
144 VALUES";
145
146 foreach ($this->phrases AS $name => $text)
147 {
148 $querybuild[] = "
149 ({$this->languageid}, '" . $bugsys->escape($name) . "', '" . $bugsys->escape($text) . "')";
150 }
151
152 $query .= implode(',', $querybuild);
153 }
154
155 return $query;
156 }
157
158 // -------------------------------------------------------------------
159 // -- Constructs XML data for export
160 // -------------------------------------------------------------------
161 function export($languageid)
162 {
163 global $bugsys;
164
165 // attributes for the root tag
166 $attrs = array();
167
168 if ($languageid != -1)
169 {
170 $language = $bugsys->db->query_first("SELECT * FROM " . TABLE_PREFIX . "language WHERE languageid = " . intval($languageid));
171 if (!$language)
172 {
173 return false;
174 }
175
176 $attrs['title'] = $language['title'];
177 $attrs['languagecode'] = $language['languagecode'];
178 $attrs['charset'] = $language['charset'];
179 $attrs['direction'] = $language['direction'];
180
181 $phrasefetch = $bugsys->db->query("SELECT * FROM " . TABLE_PREFIX . "locale WHERE languageid = $language[languageid] ORDER BY varname ASC");
182 while ($phrase = $bugsys->db->fetch_array($phrasefetch))
183 {
184 $phrases["$phrase[varname]"] = $phrase['phrasetext'];
185 }
186 $bugsys->db->free_result($phrasefetch);
187 }
188 else
189 {
190 $attrs['MASTER'] = 'MASTER';
191
192 $phrasefetch = $bugsys->db->query("SELECT * FROM " . TABLE_PREFIX . "phrase ORDER BY varname ASC");
193 while ($phrase = $bugsys->db->fetch_array($phrasefetch))
194 {
195 $phrases["$phrase[varname]"] = $phrase['phrasetext'];
196 }
197 $bugsys->db->free_result($phrasefetch);
198 }
199
200 // construct the top notice
201 $xmlout = (($languageid == -1) ? '<!-- $' . 'HeadURL$ -->' . "\n" . '<!-- $' . 'Id$ -->' : '<!-- This file was automatically generated by BugStrike [#]version[#] -->') . "\n\n";
202
203 // construct the root tag
204 foreach ($attrs AS $name => $value)
205 {
206 $outattrs[] = $name . '="' . $bugsys->escape($value) . '"';
207 }
208 $xmlout .= '<language ' . implode(' ', $outattrs) . ">\n";
209
210 // construct the phrases
211 foreach ($phrases AS $varname => $text)
212 {
213 $xmlout .= "\t<phrase name=\"" . $bugsys->escape($varname) . "\"><![CDATA[$text]]></phrase>\n";
214 }
215
216 // construct the end root tag
217 $xmlout .= '</language>';
218
219 // all finished
220 return $xmlout;
221 }
222 }
223
224 /*=====================================================================*\
225 || ###################################################################
226 || # $HeadURL$
227 || # $Id$
228 || ###################################################################
229 \*=====================================================================*/
230 ?>