ILIAS  eassessment Revision 61809
 All Data Structures Namespaces Files Functions Variables Groups Pages
Xml.php
Go to the documentation of this file.
1 <?php
2 
8 {
9 
10  protected $interchange;
11  private $namespace;
12 
13  protected function writeHTMLDiv($html) {
14  $this->startElement('div');
15 
16  $purifier = HTMLPurifier::getInstance();
17  $html = $purifier->purify($html);
18  $this->writeAttribute('xmlns', 'http://www.w3.org/1999/xhtml');
19  $this->writeRaw($html);
20 
21  $this->endElement(); // div
22  }
23 
24  protected function export($var) {
25  if ($var === array()) return 'array()';
26  return var_export($var, true);
27  }
28 
29  public function build($interchange) {
30  // global access, only use as last resort
31  $this->interchange = $interchange;
32 
33  $this->setIndent(true);
34  $this->startDocument('1.0', 'UTF-8');
35  $this->startElement('configdoc');
36  $this->writeElement('title', $interchange->name);
37 
38  foreach ($interchange->directives as $directive) {
39  $this->buildDirective($directive);
40  }
41 
42  if ($this->namespace) $this->endElement(); // namespace
43 
44  $this->endElement(); // configdoc
45  $this->flush();
46  }
47 
48  public function buildDirective($directive) {
49 
50  // Kludge, although I suppose having a notion of a "root namespace"
51  // certainly makes things look nicer when documentation is built.
52  // Depends on things being sorted.
53  if (!$this->namespace || $this->namespace !== $directive->id->getRootNamespace()) {
54  if ($this->namespace) $this->endElement(); // namespace
55  $this->namespace = $directive->id->getRootNamespace();
56  $this->startElement('namespace');
57  $this->writeAttribute('id', $this->namespace);
58  $this->writeElement('name', $this->namespace);
59  }
60 
61  $this->startElement('directive');
62  $this->writeAttribute('id', $directive->id->toString());
63 
64  $this->writeElement('name', $directive->id->getDirective());
65 
66  $this->startElement('aliases');
67  foreach ($directive->aliases as $alias) $this->writeElement('alias', $alias->toString());
68  $this->endElement(); // aliases
69 
70  $this->startElement('constraints');
71  if ($directive->version) $this->writeElement('version', $directive->version);
72  $this->startElement('type');
73  if ($directive->typeAllowsNull) $this->writeAttribute('allow-null', 'yes');
74  $this->text($directive->type);
75  $this->endElement(); // type
76  if ($directive->allowed) {
77  $this->startElement('allowed');
78  foreach ($directive->allowed as $value => $x) $this->writeElement('value', $value);
79  $this->endElement(); // allowed
80  }
81  $this->writeElement('default', $this->export($directive->default));
82  $this->writeAttribute('xml:space', 'preserve');
83  if ($directive->external) {
84  $this->startElement('external');
85  foreach ($directive->external as $project) $this->writeElement('project', $project);
86  $this->endElement();
87  }
88  $this->endElement(); // constraints
89 
90  if ($directive->deprecatedVersion) {
91  $this->startElement('deprecated');
92  $this->writeElement('version', $directive->deprecatedVersion);
93  $this->writeElement('use', $directive->deprecatedUse->toString());
94  $this->endElement(); // deprecated
95  }
96 
97  $this->startElement('description');
98  $this->writeHTMLDiv($directive->description);
99  $this->endElement(); // description
100 
101  $this->endElement(); // directive
102  }
103 
104 }
105 
106 // vim: et sw=4 sts=4