ILIAS  release_5-2 Revision v5.2.25-18-g3f80b828510
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 
30 
31  function __construct($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::__construct($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';
264  $group_id = ilSCGroups::getInstance()->lookupGroupByComponentId($this->getComponentId());
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  case 'badges':
292  include_once "Services/Badge/classes/class.ilBadgeHandler.php";
294  $this->has_badges[] = $this->getComponentId();
295  break;
296  }
297  }
298  }
299 
306  function handlerEndTag($a_xml_parser,$a_name)
307  {
308  // call special reader
309  if ($this->current_reader != "")
310  {
311  $this->readers[$this->current_reader]["reader"]->handlerEndTag($a_xml_parser,$a_name);
312  }
313  else
314  {
315  if($a_name == "module" || $a_name == "service")
316  {
317  include_once "Services/Cron/classes/class.ilCronManager.php";
318  ilCronManager::clearFromXML($this->current_component,
319  (array)$this->has_cron[$this->current_component]);
320 
321  require_once 'Services/Mail/classes/class.ilMailTemplateService.php';
322  ilMailTemplateService::clearFromXml($this->current_component, (array)$this->mail_templates_by_component[$this->current_component]);
323 
324  if(!in_array($this->getComponentId(), (array)$this->has_badges))
325  {
326  include_once "Services/Badge/classes/class.ilBadgeHandler.php";
327  ilBadgeHandler::clearFromXml($this->getComponentId());
328  }
329  }
330  }
331 
332  // check if a special reader needs to be activated
333  if (isset($this->readers[$a_name]))
334  {
335  $this->current_reader = null;
336  }
337  }
338 
339 
347  function handlerCharacterData($a_xml_parser,$a_data)
348  {
349  // DELETE WHITESPACES AND NEWLINES OF CHARACTER DATA
350  $a_data = preg_replace("/\n/","",$a_data);
351  $a_data = preg_replace("/\t+/","",$a_data);
352 
353  if (!empty($a_data))
354  {
355  switch ($this->current_tag)
356  {
357  case '':
358  }
359  }
360  }
361 
365  public function setComponentId($a_component_id)
366  {
367  $this->component_id = $a_component_id;
368  }
369 
374  public function getComponentId()
375  {
376  return $this->component_id;
377  }
378 
379 }
380 ?>
clearTables()
clear the tables
setComponentId($a_component_id)
Set from module or service reader.
static updateFromXML($a_component, $a_id, $a_class, $a_path=null)
Process data from module.xml/service.xml.
static insertFromXML($a_component, $a_id, $a_class, $a_path)
static clearFromXml($a_component, array $a_new_templates)
static updateFromXML($a_component_id)
Import component definition.
handlerCharacterData($a_xml_parser, $a_data)
end tag handler
Class ilWACSecurePath.
Base class for sax-based expat parsing extended classes need to overwrite the method setHandlers and ...
setHandlers($a_xml_parser)
$a_type
Definition: workflow.php:93
static updateFromXML($a_component_id)
type $ilDB
getComponentId()
Get component id.
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...
__construct($a_path, $a_name, $a_type)
static getInstance()
Get singleton instance.
static getInstanceByGroupId($a_group_id)
Get singleton instance.
Create styles array
The data for the language used.
handlerBeginTag($a_xml_parser, $a_name, $a_attribs)
Start tag handler.
handlerEndTag($a_xml_parser, $a_name)
End tag handler.
Class arException.
Component definition reader (reads common tags in module.xml and service.xml files) Name is misleadin...
static clearFromXML($a_component, array $a_xml_job_ids)
Clear job data.
global $ilDB
static deleteObjectDefinition($a_id)
Delete an object definition (this is currently needed for test cases)