ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
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
16require_once "./Services/Object/classes/class.ilObject.php";
17
19{
27
37
47
54
62
69 function ilObjLanguageFolder($a_id,$a_call_by_reference = true)
70 {
71 $this->type = "lngf";
72 $this->ilObject($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) && (ereg ("(^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
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) && (ereg ("(^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?>
Class ilObjLanguageFolder contains all function to manage language support for ILIAS3 install,...
checkAllLanguages()
validate the logical structure of a lang-file
getLanguages()
gather all information about available languages
ilObjLanguageFolder($a_id, $a_call_by_reference=true)
Constructor @access public.
removeLanguages($a_languages)
remove languages which are not installed AND has no lang-file
addNewLanguages($a_languages)
add new languages
Class ilObjLanguage.
cut_header($content)
remove lang-file haeder information from '$content' This function seeks for a special keyword where t...
Class ilObject Basic functions for all objects.
static _getObjectsByType($a_obj_type="", $a_owner="")
Get objects by type.
ilObject($a_id=0, $a_reference=true)
Constructor @access public.
global $ilDB