ILIAS  release_5-1 Revision 5.0.0-5477-g43f3e3fab5f
class.ilObjDefReader.php
Go to the documentation of this file.
1<?php
2
3/* Copyright (c) 1998-2013 ILIAS open source, Extended GPL, see docs/LICENSE */
4
16{
17 protected $component_id;
18
19 protected $readers = array(
20 "copage" => array("class" => "ilCOPageDefReader")
21 );
22 protected $current_reader = null;
23
24 protected $in_mail_templates = false;
25
29 protected $mail_templates_by_component = array();
30
31 function ilObjDefReader($a_path, $a_name, $a_type)
32 {
33 // init specialized readers
34 foreach ($this->readers as $k => $reader)
35 {
36 $class = $reader["class"];
37 $class_path = "./setup/classes/class.".$class.".php";
38 include_once($class_path);
39 $this->readers[$k]["reader"] = new $class();
40 }
41
42 $this->name = $a_name;
43 $this->type = $a_type;
44//echo "<br>-".$a_path."-".$this->name."-".$this->type."-";
45 parent::ilSaxParser($a_path);
46 }
47
48 function setHandlers($a_xml_parser)
49 {
50 xml_set_object($a_xml_parser,$this);
51 xml_set_element_handler($a_xml_parser,'handlerBeginTag','handlerEndTag');
52 xml_set_character_data_handler($a_xml_parser,'handlerCharacterData');
53 }
54
58 function clearTables()
59 {
60 global $ilDB;
61
62 $ilDB->manipulate("DELETE FROM il_object_def");
63
64 $ilDB->manipulate("DELETE FROM il_object_subobj");
65
66 $ilDB->manipulate("DELETE FROM il_object_group");
67
68 $ilDB->manipulate("DELETE FROM il_pluginslot");
69
70 $ilDB->manipulate("DELETE FROM il_component");
71
72 $ilDB->manipulate("DELETE FROM il_event_handling");
73
74 $ilDB->manipulate("DELETE FROM il_object_sub_type");
75
76 foreach ($this->readers as $k => $reader)
77 {
78 $this->readers[$k]["reader"]->clearTables();
79 }
80 }
81
85 static function deleteObjectDefinition($a_id)
86 {
87 global $ilDB;
88
89 $ilDB->manipulateF("DELETE FROM il_object_def WHERE id = %s",
90 array("text"), array($a_id));
91
92 $ilDB->manipulateF("DELETE FROM il_object_subobj WHERE parent = %s OR subobj = %s",
93 array("text", "text"), array($a_id, $a_id));
94 }
95
103 function handlerBeginTag($a_xml_parser,$a_name,$a_attribs)
104 {
105 global $ilDB;
106
107 $this->current_tag = $a_name;
108
109 // check if a special reader needs to be activated
110 if (isset($this->readers[$a_name]))
111 {
112 $this->current_reader = $a_name;
113 }
114
115 // call special reader
116 if ($this->current_reader != "")
117 {
118 $this->readers[$this->current_reader]["reader"]->handlerBeginTag($a_xml_parser,$a_name,$a_attribs,
119 $this->current_component);
120 }
121 else
122 {
123 // default handling
124 switch ($a_name)
125 {
126 case 'object':
127
128 // if attributes are not given, set default (repository only)
129 if($a_attribs["repository"] === NULL)
130 {
131 $a_attribs["repository"] = true;
132 }
133 if($a_attribs["workspace"] === NULL)
134 {
135 $a_attribs["workspace"] = false;
136 }
137
138 $this->current_object = $a_attribs["id"];
139 $ilDB->manipulateF("INSERT INTO il_object_def (id, class_name, component,location,".
140 "checkbox,inherit,translate,devmode,allow_link,allow_copy,rbac,default_pos,".
141 "default_pres_pos,sideblock,grp,system,export,repository,workspace,administration,amet) VALUES ".
142 "(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
143 array("text", "text", "text", "text", "integer", "integer", "text", "integer","integer","integer",
144 "integer","integer","integer","integer", "text", "integer", "integer", "integer", "integer",'integer','integer'),
145 array(
146 $a_attribs["id"],
147 $a_attribs["class_name"],
148 $this->current_component,
149 $this->current_component."/".$a_attribs["dir"],
150 (int) $a_attribs["checkbox"],
151 (int) $a_attribs["inherit"],
152 $a_attribs["translate"],
153 (int) $a_attribs["devmode"],
154 (int) $a_attribs["allow_link"],
155 (int) $a_attribs["allow_copy"],
156 (int) $a_attribs["rbac"],
157 (int) $a_attribs["default_pos"],
158 (int) $a_attribs["default_pres_pos"],
159 (int) $a_attribs["sideblock"],
160 $a_attribs["group"],
161 (int) $a_attribs["system"],
162 (int) $a_attribs["export"],
163 (int) $a_attribs["repository"],
164 (int) $a_attribs["workspace"],
165 (int) $a_attribs['administration'],
166 (int) $a_attribs['amet']
167 ));
168 break;
169
170 case "subobj":
171 $ilDB->manipulateF("INSERT INTO il_object_subobj (parent, subobj, mmax) VALUES (%s,%s,%s)",
172 array("text", "text", "integer"),
173 array($this->current_object, $a_attribs["id"], (int) $a_attribs["max"]));
174 break;
175
176 case "parent":
177 $ilDB->manipulateF("INSERT INTO il_object_subobj (parent, subobj, mmax) VALUES (%s,%s,%s)",
178 array("text", "text", "integer"),
179 array($a_attribs["id"], $this->current_object, (int) $a_attribs["max"]));
180 break;
181
182 case "objectgroup":
183 $ilDB->manipulateF("INSERT INTO il_object_group (id, name, default_pres_pos) VALUES (%s,%s,%s)",
184 array("text", "text", "integer"),
185 array($a_attribs["id"], $a_attribs["name"], $a_attribs["default_pres_pos"]));
186 break;
187
188 case "pluginslot":
189 $this->current_object = $a_attribs["id"];
190 $q = "INSERT INTO il_pluginslot (component, id, name) VALUES (".
191 $ilDB->quote($this->current_component, "text").",".
192 $ilDB->quote($a_attribs["id"], "text").",".
193 $ilDB->quote($a_attribs["name"], "text").")";
194 $ilDB->manipulate($q);
195 break;
196
197 case "event":
198 $component = $a_attribs["component"];
199 if(!$component)
200 {
201 $component = $this->current_component;
202 }
203 $q = "INSERT INTO il_event_handling (component, type, id) VALUES (".
204 $ilDB->quote($component, "text").",".
205 $ilDB->quote($a_attribs["type"], "text").",".
206 $ilDB->quote($a_attribs["id"], "text").")";
207 $ilDB->manipulate($q);
208 break;
209
210 case "cron":
211 $component = $a_attribs["component"];
212 if(!$component)
213 {
214 $component = $this->current_component;
215 }
216 include_once "Services/Cron/classes/class.ilCronManager.php";
217 ilCronManager::updateFromXML($component, $a_attribs["id"], $a_attribs["class"], $a_attribs["path"]);
218 $this->has_cron[$component][] = $a_attribs["id"];
219 break;
220
221 case 'mailtemplates':
222 $this->in_mail_templates = true;
223 break;
224
225 case 'context':
226 if(!$this->in_mail_templates)
227 {
228 break;
229 }
230
231 $component = $a_attribs['component'];
232 if(!$component)
233 {
234 $component = $this->current_component;
235 }
236
237 require_once 'Services/Mail/classes/class.ilMailTemplateService.php';
239 $component,
240 $a_attribs['id'],
241 $a_attribs['class'],
242 $a_attribs['path']
243 );
244 $this->mail_templates_by_component[$component][] = $a_attribs["id"];
245 break;
246
247 case "sub_type":
248 $ilDB->manipulate("INSERT INTO il_object_sub_type ".
249 "(obj_type, sub_type, amet) VALUES (".
250 $ilDB->quote($this->current_object, "text").",".
251 $ilDB->quote($a_attribs["id"], "text").",".
252 $ilDB->quote($a_attribs["amet"], "integer").
253 ")");
254 break;
255
256 case 'systemcheck':
257
258 include_once './Services/SystemCheck/classes/class.ilSCGroups.php';
259 ilSCGroups::getInstance()->updateFromComponentDefinition($this->getComponentId());
260 break;
261
262 case 'systemcheck_task':
263 include_once './Services/SystemCheck/classes/class.ilSCGroups.php';
265
266 include_once './Services/SystemCheck/classes/class.ilSCTasks.php';
267 $tasks = ilSCTasks::getInstanceByGroupId($group_id);
268 $tasks->updateFromComponentDefinition($a_attribs['identifier']);
269 break;
270
271 case "secure_path":
272 require_once('./Services/WebAccessChecker/classes/class.ilWACSecurePath.php');
273 try {
274 $ilWACSecurePath = ilWACSecurePath::findOrFail($a_attribs["path"]);
275 } catch (arException $e) {
276 $ilWACSecurePath = new ilWACSecurePath();
277 $ilWACSecurePath->setPath($a_attribs["path"]);
278 $ilWACSecurePath->create();
279 }
280 $ilWACSecurePath->setCheckingClass($a_attribs["checking-class"]);
281 $ilWACSecurePath->setInSecFolder((bool)$a_attribs["in-sec-folder"]);
282 $ilWACSecurePath->setComponentDirectory(dirname($this->xml_file));
283 $ilWACSecurePath->update();
284 break;
285
286 case 'logging':
287 include_once './Services/Logging/classes/class.ilLogComponentLevels.php';
289 break;
290 }
291 }
292 }
293
300 function handlerEndTag($a_xml_parser,$a_name)
301 {
302 // call special reader
303 if ($this->current_reader != "")
304 {
305 $this->readers[$this->current_reader]["reader"]->handlerEndTag($a_xml_parser,$a_name);
306 }
307 else
308 {
309 if($a_name == "module" || $a_name == "service")
310 {
311 include_once "Services/Cron/classes/class.ilCronManager.php";
312 ilCronManager::clearFromXML($this->current_component,
313 (array)$this->has_cron[$this->current_component]);
314
315 require_once 'Services/Mail/classes/class.ilMailTemplateService.php';
316 ilMailTemplateService::clearFromXml($this->current_component, (array)$this->mail_templates_by_component[$this->current_component]);
317 }
318 }
319
320 // check if a special reader needs to be activated
321 if (isset($this->readers[$a_name]))
322 {
323 $this->current_reader = null;
324 }
325 }
326
327
335 function handlerCharacterData($a_xml_parser,$a_data)
336 {
337 // DELETE WHITESPACES AND NEWLINES OF CHARACTER DATA
338 $a_data = preg_replace("/\n/","",$a_data);
339 $a_data = preg_replace("/\t+/","",$a_data);
340
341 if (!empty($a_data))
342 {
343 switch ($this->current_tag)
344 {
345 case '':
346 }
347 }
348 }
349
353 public function setComponentId($a_component_id)
354 {
355 $this->component_id = $a_component_id;
356 }
357
362 public function getComponentId()
363 {
364 return $this->component_id;
365 }
366
367}
368?>
static findOrFail($primary_key, array $add_constructor_args=array())
Tries to find the object and throws an Exception if object is not found, instead of returning null.
Class arException.
static updateFromXML($a_component, $a_id, $a_class, $a_path=null)
Process data from module.xml/service.xml.
static clearFromXML($a_component, array $a_xml_job_ids)
Clear job data.
static updateFromXML($a_component_id)
@global type $ilDB
static insertFromXML($a_component, $a_id, $a_class, $a_path)
static clearFromXml($a_component, array $a_new_templates)
Component definition reader (reads common tags in module.xml and service.xml files) Name is misleadin...
setHandlers($a_xml_parser)
set event handler should be overwritten by inherited class @access private
handlerCharacterData($a_xml_parser, $a_data)
end tag handler
static deleteObjectDefinition($a_id)
Delete an object definition (this is currently needed for test cases)
handlerEndTag($a_xml_parser, $a_name)
End tag handler.
getComponentId()
Get component id.
ilObjDefReader($a_path, $a_name, $a_type)
setComponentId($a_component_id)
Set from module or service reader.
clearTables()
clear the tables
handlerBeginTag($a_xml_parser, $a_name, $a_attribs)
Start tag handler.
lookupGroupByComponentId($a_component_id)
static getInstance()
Get singleton instance.
static getInstanceByGroupId($a_group_id)
Get singleton instance.
Base class for sax-based expat parsing extended classes need to overwrite the method setHandlers and ...
Class ilWACSecurePath.
global $ilDB