ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
class.ilObjLanguageFolder.php
Go to the documentation of this file.
1 <?php
2 /* Copyright (c) 1998-2009 ILIAS open source, Extended GPL, see docs/LICENSE */
3 
4 
16 require_once "./Services/Object/classes/class.ilObject.php";
17 
19 {
27 
37 
47 
54 
62 
69  function __construct($a_id,$a_call_by_reference = true)
70  {
71  $this->type = "lngf";
72  parent::__construct($a_id,$a_call_by_reference);
73 
74  // init language support
75  global $lng;
76 
77  $this->lang_path = $lng->lang_path;
78  $this->lang_default = $lng->lang_default;
79  $this->lang_user = $lng->lang_user;
80  $this->separator = $lng->separator;
81  }
82 
97  function getLanguages ()
98  {
99  global $lng;
100 
101  $lng->loadLanguageModule("meta");
102 
103  // set path to directory where lang-files reside
104  $d = dir($this->lang_path);
105  $tmpPath = getcwd();
106  chdir ($this->lang_path);
107 
108  // get available lang-files
109  while ($entry = $d->read())
110  {
111  if (is_file($entry) && (preg_match("~(^ilias_.{2}\.lang$)~", $entry)))
112  {
113  $lang_key = substr($entry,6,2);
114  $languages[$lang_key] = ""; // long names will be set in class Out
115  }
116  }
117 
118  // ensure that arrays are initiated when no lang file was found
119  if (!array($languages))
120  {
121  $language = array();
122  $tmp_array = array();
123  }
124 
125  $tmp_array = array_keys($languages);
126  $lang_keys = array();
127 
128  // now get languages from database
129  if ($lang_db = ilObject::_getObjectsByType("lng"))
130  {
131  foreach ($lang_db as $lang)
132  {
133  // set values
134  $lang_key = $lang["title"];
135  $languages[$lang_key] = $lang;
136  $lang_keys[] = $lang_key;
137 
138  // determine default language and language of current user
139  if ($lang_key == $this->lang_user)
140  {
141  $languages[$lang_key]["status"] = "in_use";
142  }
143 
144  if ($lang_key == $this->lang_default)
145  {
146  $languages[$lang_key]["status"] = "system_language";
147  }
148 
149  // check if files are missing
150  if ((count($tmp_array) > 0) && (!in_array($lang_key,$tmp_array)))
151  {
152  $languages[$lang_key]["info"] = "file_not_found";
153  }
154  }
155  }
156 
157  // compute new languages
158  foreach ($languages as $lang_key => $lang_data)
159  {
160  if (!in_array($lang_key,$lang_keys))
161  {
162  $languages[$lang_key]["info"] = "new_language";
163  //$languages[$lang_key]["desc"] = "not_installed";
164  }
165  }
166 
167  chdir($tmpPath);
168 
169  // Insert languages with files new found into table language
170  $languages = $this->addNewLanguages($languages);
171 
172  // Remove from array & db languages which are not installed and no lang-files
173  $languages = $this->removeLanguages($languages);
174 
175  // setting language's full names
176  foreach ($languages as $lang_key => $lang_data)
177  {
178  $languages[$lang_key]["name"] = $lng->txt("meta_l_".$lang_key);
179  }
180 
181  $this->languages = $languages;
182 
183  return $this->languages;
184  }
185 
196  function addNewLanguages($a_languages)
197  {
198  if (count($a_languages) > 0)
199  {
200  foreach ($a_languages as $lang_key => $lang_data)
201  {
202  if ($lang_data["info"] == "new_language")
203  {
204  include_once("./Services/Language/classes/class.ilObjLanguage.php");
205  $lngObj = new ilObjLanguage();
206  $lngObj->setTitle($lang_key);
207  $lngObj->setDescription("not_installed");
208  $lngObj->create();
209 
210  // must get OOP through the whole class some time
211  // (no arrays with db fields! this class doesn't know anything about table object!)
212  $a_languages[$lang_key] = array("obj_id" => $lngObj->getId(),
213  "type" => $lngObj->getType(),
214  "description" => $lngObj->getDescription(),
215  "desc" => $lngObj->getDescription(),
216  "owner" => $lngObj->getOwner(),
217  "create_date" => $lngObj->getCreateDate(),
218  "last_update" => $lngObj->getLastUpdateDate());
219 
220  $a_languages[$lang_key]["info"] = "new_language";
221  unset($lngObj); // better: the objects should be resident in an member array of this class
222  }
223  }
224  }
225 
226  return $a_languages;
227  }
228 
239  function removeLanguages($a_languages)
240  {
241  global $ilDB;
242 
243  foreach ($a_languages as $lang_key => $lang_data)
244  {
245  if ($lang_data["desc"] == "not_installed" && $lang_data["info"] == "file_not_found")
246  {
247  // update languages array
248  unset($a_languages[$lang_key]);
249 
250  // update object_data table
251  $query = "DELETE FROM object_data ".
252  "WHERE type = ".$ilDB->quote("lng", "text")." ".
253  "AND title = ".$ilDB->quote($lang_key, "text");
254  $ilDB->manipulate($query);
255  }
256  }
257 
258  return $a_languages;
259  }
260 
269  function checkAllLanguages()
270  {
271  // TODO: lng object should not be used in this class
272  global $lng;
273 
274  // set path to directory where lang-files reside
275  $d = dir($this->lang_path);
276  $tmpPath = getcwd();
277  chdir ($this->lang_path);
278 
279  // for giving a message when no lang-file was found
280  $found = false;
281 
282  // get available lang-files
283  while ($entry = $d->read())
284  {
285  if (is_file($entry) && (preg_match("~(^ilias_.{2}\.lang$)~", $entry)))
286  {
287  // textmeldung, wenn langfile gefunden wurde
288  $output .= "<br/><br/>".$lng->txt("langfile_found").": ".$entry;
289  $content = file ($entry);
290 
291  $found = true;
292  $error = false;
293 
294  if ($content = ilObjLanguage::cut_header($content))
295  {
296  foreach ($content as $key => $val)
297  {
298  $separated = explode ($this->separator,trim($val));
299  $num = count($separated);
300 
301  if ($num != 3)
302  {
303  $error = true;
304  $line = $key + 37;
305 
306  $output .= "<br/><b/>".$lng->txt("err_in_line")." ".$line." !</b>&nbsp;&nbsp;";
307  $output .= $lng->txt("module").": ".$separated[0];
308  $output .= ", ".$lng->txt("identifier").": ".$separated[1];
309  $output .= ", ".$lng->txt("value").": ".$separated[2];
310 
311  switch ($num)
312  {
313  case 1:
314  if (empty($separated[0]))
315  {
316  $output .= "<br/>".$lng->txt("err_no_param")." ".$lng->txt("check_langfile");
317  }
318  else
319  {
320  $output .= "<br/>".$lng->txt("err_1_param")." ".$lng->txt("check_langfile");
321  }
322  break;
323 
324  case 2:
325  $output .= "<br/>".$lng->txt("err_2_param")." ".$lng->txt("check_langfile");
326  break;
327 
328  default:
329  $output .= "<br/>".$lng->txt("err_over_3_param")." ".$lng->txt("check_langfile");
330  break;
331  }
332  }
333  }
334 
335  if ($error) {
336  $output .= "<br/>".$lng->txt("file_not_valid")." ".$lng->txt("err_count_param");
337  }
338  else {
339  $output .= "<br/>".$lng->txt("file_valid");
340  }
341  }
342  else {
343  $output .= "<br/>".$lng->txt("file_not_valid")." ".$lng->txt("err_wrong_header");
344  }
345  }
346  }
347 
348  $d->close();
349 
350  if (!$found) {
351  $output .= "<br/>".$lng->txt("err_no_langfile_found");
352  }
353 
354  chdir($tmpPath);
355  return $output;
356  }
357 } // END class.LanguageFolderObject
358 ?>
$error
Definition: Error.php:17
__construct($a_id, $a_call_by_reference=true)
Constructor public.
Class ilObjLanguage.
Class ilObject Basic functions for all objects.
addNewLanguages($a_languages)
add new languages
static _getObjectsByType($a_obj_type="", $a_owner="")
Get objects by type.
for($col=0; $col< 50; $col++) $d
if(!is_dir( $entity_dir)) exit("Fatal Error ([A-Za-z0-9]+)\+" &#(? foreach( $entity_files as $file) $output
getLanguages()
gather all information about available languages
Reload workbook from saved file
Create styles array
The data for the language used.
Class ilObjLanguageFolder contains all function to manage language support for ILIAS3 install...
global $ilDB
for($i=1; $i<=count($kw_cases_sel); $i+=1) $lang
Definition: langwiz.php:349
removeLanguages($a_languages)
remove languages which are not installed AND has no lang-file
static cut_header($content)
remove lang-file haeder information from &#39;$content&#39; This function seeks for a special keyword where t...
checkAllLanguages()
validate the logical structure of a lang-file