XpressEngine Core  1.11.2
 All Classes Namespaces Files Functions Variables Pages
XmlLangParser.class.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (C) NAVER <http://www.navercorp.com> */
3 
11 class XmlLangParser extends XmlParser
12 {
13 
18  var $compiled_path = './files/cache/lang/'; // / directory path for compiled cache file
23  var $xml_file = NULL;
24 
29  var $php_file = NULL;
30 
35  var $code;
36 
42 
49 
57  {
58  $this->lang_type = $lang_type;
59  $this->xml_file = $xml_file;
60  $this->php_file = $this->_getCompiledFileName($lang_type);
61  }
62 
67  function compile()
68  {
69  if(!file_exists($this->xml_file))
70  {
71  return FALSE;
72  }
73  if(!file_exists($this->php_file))
74  {
75  $this->_compile();
76  }
77  else
78  {
79  if(filemtime($this->xml_file) > filemtime($this->php_file))
80  {
81  $this->_compile();
82  }
83  else
84  {
85  return $this->php_file;
86  }
87  }
88 
89  return $this->_writeFile() ? $this->php_file : FALSE;
90  }
91 
96  function getCompileContent()
97  {
98  if(!file_exists($this->xml_file))
99  {
100  return FALSE;
101  }
102  $this->_compile();
103 
104  return $this->code;
105  }
106 
111  function _compile()
112  {
113  $lang_selected = Context::loadLangSelected();
114  $this->lang_types = array_keys($lang_selected);
115 
116  // read xml file
117  $buff = FileHandler::readFile($this->xml_file);
118  $buff = str_replace('xml:lang', 'xml_lang', $buff);
119 
120  // xml parsing
121  $xml_obj = parent::parse($buff);
122 
123  $item = $xml_obj->lang->item;
124  if(!is_array($item))
125  {
126  $item = array($item);
127  }
128  foreach($item as $i)
129  {
130  $this->_parseItem($i, $var = '$lang->%s');
131  }
132  }
133 
138  function _writeFile()
139  {
140  if(!$this->code)
141  {
142  return;
143  }
144  FileHandler::writeFile($this->php_file, "<?php\n" . $this->code);
145  return false;
146  }
147 
154  function _parseItem($item, $var)
155  {
156  $name = $item->attrs->name;
157  $value = $item->value;
158  $var = sprintf($var, $name);
159 
160  if($item->item)
161  {
162  $type = $item->attrs->type;
163  $mode = $item->attrs->mode;
164 
165  if($type == 'array')
166  {
167  $this->code .= "if(!is_array({$var})){\n";
168  $this->code .= " {$var} = array();\n";
169  $this->code .= "}\n";
170  $var .= '[\'%s\']';
171  }
172  else
173  {
174  $this->code .= "if(!is_object({$var})){\n";
175  $this->code .= " {$var} = new stdClass();\n";
176  $this->code .= "}\n";
177  $var .= '->%s';
178  }
179 
180  $items = $item->item;
181  if(!is_array($items))
182  {
183  $items = array($items);
184  }
185  foreach($items as $item)
186  {
187  $this->_parseItem($item, $var);
188  }
189  }
190  else
191  {
192  $code = $this->_parseValues($value, $var);
193  $this->code .= $code;
194  }
195  }
196 
203  function _parseValues($nodes, $var)
204  {
205  if(!is_array($nodes))
206  {
207  $nodes = array($nodes);
208  }
209 
210  $value = array();
211  foreach($nodes as $node)
212  {
213  $return = $this->_parseValue($node, $var);
214  if($return && is_array($return))
215  {
216  $value = array_merge($value, $return);
217  }
218  }
219 
220  if($value[$this->lang_type])
221  {
222  return $value[$this->lang_type];
223  }
224  else if($value['en'])
225  {
226  return $value['en'];
227  }
228  else if($value['ko'])
229  {
230  return $value['ko'];
231  }
232 
233  foreach($this->lang_types as $lang_type)
234  {
235  if($lang_type == 'en' || $lang_type == 'ko' || $lang_type == $this->lang_type)
236  {
237  continue;
238  }
239  if($value[$lang_type])
240  {
241  return $value[$lang_type];
242  }
243  }
244 
245  return '';
246  }
247 
254  function _parseValue($node, $var)
255  {
256  $lang_type = $node->attrs->xml_lang;
257  $value = $node->body;
258  if(!$value)
259  {
260  return false;
261  }
262 
263  $var .= '=\'' . str_replace("'", "\'", $value) . "';\n";
264  return array($lang_type => $var);
265  }
266 
273  function _getCompiledFileName($lang_type, $type = 'php')
274  {
275  return sprintf('%s%s.%s.php', $this->compiled_path, md5($this->xml_file), $lang_type);
276  }
277 
278 }
279 /* End of file XmlLangParser.class.php */
280 /* Location: ./classes/xml/XmlLangParser.class.php */
__construct($xml_file, $lang_type)
_parseItem($item, $var)
writeFile($filename, $buff, $mode="w")
_getCompiledFileName($lang_type, $type= 'php')
_parseValues($nodes, $var)
_parseValue($node, $var)
readFile($filename)
loadLangSelected()