ILIAS  release_8 Revision v8.19
All Data Structures Namespaces Files Functions Variables Modules Pages
class.ilKSDocumentationEntryGUI.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
24 
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(
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 }
Class Factory.
__construct(ILIAS\UI\Factory $factory, ilCtrl $ilCtrl, Entries $entries, ?string $current_opened_node_id)
Class ChatMainBarProvider .
Container storing a list of UI Component Entries, can act as Iterator, countable and is serializable...
$path
Definition: ltiservices.php:32
This file is part of ILIAS, a powerful learning management system published by ILIAS open source e-Le...
if($format !==null) $name
Definition: metadata.php:247
This describes how a Report could be modified during construction of UI.
Definition: Report.php:26
Renders the Overview of one Example in the Administration.
$factory
Definition: metadata.php:75