ILIAS  trunk Revision v11.0_alpha-3011-gc6b235a2e85
class.ilKSDocumentationEntryGUI.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
24
28class ilKSDocumentationEntryGUI
29{
30 protected Entry\ComponentEntry $entry;
31 protected Entry\ComponentEntries $entries;
32 protected ilCtrl $ctrl;
33 protected ILIAS\UI\Factory $f;
34
35 public function __construct(
36 ILIAS\UI\Factory $factory,
37 ilCtrl $ilCtrl,
38 Entries $entries,
39 ?string $current_opened_node_id
40 ) {
41 $this->f = $factory;
42 $this->ctrl = $ilCtrl;
43
44 if ($current_opened_node_id) {
45 $this->ctrl->setParameterByClass('ilsystemstyledocumentationgui', 'node_id', $current_opened_node_id);
46 $this->entry = $entries->getEntryById($current_opened_node_id);
47 } else {
48 $this->entry = $entries->getRootEntry();
49 }
50 $this->entries = $entries;
51 }
52
53 public function createUIComponentOfEntry(): Report
54 {
55 $sub_panels = [];
56
57 $feature_wiki_links = [];
58 foreach ($this->entry->getFeatureWikiReferences() as $href) {
59 $feature_wiki_links[] = $href;
60 }
61
62 $sub_panels[] = $this->f->panel()->sub(
63 'Description',
64 [
65 $this->f->listing()->descriptive(
66 [
67 'Purpose' => $this->entry->getDescription()->getProperty('purpose'),
68 'Composition' => $this->entry->getDescription()->getProperty('composition'),
69 'Effect' => $this->entry->getDescription()->getProperty('effect'),
70
71 ]
72 ),
73 $this->f->listing()->descriptive(
74 [
75 'Background' => $this->entry->getBackground(),
76 'Context' => $this->f->listing()->ordered($this->entry->getContext()),
77 'Feature Wiki References' => $this->f->listing()->ordered($feature_wiki_links)
78 ]
79 )
80 ]
81 );
82
83 if (sizeof($this->entry->getDescription()->getProperty('rivals'))) {
84 $sub_panels[] = $this->f->panel()->sub(
85 'Rivals',
86 $this->f->listing()->descriptive(
87 $this->entry->getDescription()->getProperty('rivals')
88 )
89 );
90 }
91
92 if ($this->entry->getRules() && $this->entry->getRules()->hasRules()) {
93 $rule_listings = [];
94 foreach ($this->entry->getRulesAsArray() as $categoery => $category_rules) {
95 $rule_listings[ucfirst($categoery)] = $this->f->listing()->ordered($category_rules);
96 }
97
98 $sub_panels[] = $this->f->panel()->sub(
99 'Rules',
100 $this->f->listing()->descriptive($rule_listings)
101 );
102 }
103
104 $examples = $this->entry->getExamples();
105 if (count($examples) > 0) {
106 $nr = 1;
107 foreach ($this->entry->getExamples() as $name => $path) {
108 $path = ILIAS_ABSOLUTE_PATH . "/$path";
109 include_once($path);
110 $title = 'Example ' . $nr . ': ' . ucfirst(str_replace('_', ' ', $name));
111 $nr++;
112 $examples_function_name = $this->entry->getExamplesNamespace() . '\\' . $name;
113 try {
114 $example = "<div class='well'>" . $examples_function_name() . '</div>'; //Executes function loaded in file indicated by 'path'
115 } catch (\ILIAS\UI\NotImplementedException $e) {
116 $example = "<div class='well'>This component is not yet fully implemented.</div>";
117 }
118 $content_part_1 = $this->f->legacy()->content($example);
119 $code = str_replace('<?php\n', '', file_get_contents($path));
120 $code_html = "<div class='code-container'><pre><code>" . htmlspecialchars($code) . '</code></pre></div>';
121 $content_part_2 = $this->f->legacy()->content($code_html);
122 $content = [$content_part_1, $content_part_2];
123 $sub_panels[] = $this->f->panel()->sub($title, $content);
124 }
125 }
126 $sub_panels[] = $this->f->panel()->sub('Relations', [
127 $this->f->listing()->descriptive(
128 [
129 'Parents' => $this->f->listing()->ordered(
130 $this->entries->getParentsOfEntryTitles($this->entry->getId())
131 ),
132 'Descendants' => $this->f->listing()->unordered(
133 $this->entries->getDescendantsOfEntryTitles($this->entry->getId())
134 )
135 ]
136 )
137 ]);
138
139 return $this->f->panel()
140 ->report($this->entry->getTitle(), $sub_panels);
141 }
142}
Builds a Color from either hex- or rgb values.
Definition: Factory.php:31
Container storing a list of UI Component Entries, can act as Iterator, countable and is serializable.
Stores Information of UI Components parsed from YAML, examples and less files.
Class ilCtrl provides processing control methods.
This describes how a Report could be modified during construction of UI.
Definition: Report.php:29
$path
Definition: ltiservices.php:30
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.