ILIAS  release_8 Revision v8.25-1-g13de6a5eca6
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 include_once($path);
109 $title = 'Example ' . $nr . ': ' . ucfirst(str_replace('_', ' ', $name));
110 $nr++;
111 $examples_function_name = $this->entry->getExamplesNamespace() . '\\' . $name;
112 try {
113 $example = "<div class='well'>" . $examples_function_name() . '</div>'; //Executes function loaded in file indicated by 'path'
114 } catch (\ILIAS\UI\NotImplementedException $e) {
115 $example = "<div class='well'>This component is not yet fully implemented.</div>";
116 }
117 $content_part_1 = $this->f->legacy($example);
118 $code = str_replace('<?php\n', '', file_get_contents($path));
119 $geshi = new GeSHi($code, 'php');
120 //@Todo: we need a code container UI Component
121 $code_html = "<div class='code-container'>" . $geshi->parse_code() . '</div>';
122 $content_part_2 = $this->f->legacy($code_html);
123 $content = [$content_part_1, $content_part_2];
124 $sub_panels[] = $this->f->panel()->sub($title, $content);
125 }
126 }
127 $sub_panels[] = $this->f->panel()->sub('Relations', [
128 $this->f->listing()->descriptive(
129 [
130 'Parents' => $this->f->listing()->ordered(
131 $this->entries->getParentsOfEntryTitles($this->entry->getId())
132 ),
133 'Descendants' => $this->f->listing()->unordered(
134 $this->entries->getDescendantsOfEntryTitles($this->entry->getId())
135 )
136 ]
137 )
138 ]);
139
140 return $this->f->panel()
141 ->report($this->entry->getTitle(), $sub_panels);
142 }
143}
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:27
This is how the factory for UI elements looks.
Definition: Factory.php:38
$path
Definition: ltiservices.php:32
$factory
Definition: metadata.php:75
if($format !==null) $name
Definition: metadata.php:247
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
Class ChatMainBarProvider \MainMenu\Provider.
Class Factory.