ILIAS  trunk Revision v13.0_alpha-62-g3b72d83f2e5
PagesTableBuilder.php
Go to the documentation of this file.
1<?php
2
19declare(strict_types=1);
20
21namespace ILIAS\Wiki\Page;
22
29
31{
32 public const MODE_ALL_PAGES = "all";
33 public const MODE_NEW_PAGES = "new";
34 public const MODE_POPULAR_PAGES = "popular";
35 public const MODE_WHAT_LINKS_HERE = "what_links";
36 public const MODE_ORPHANED_PAGES = "orphaned";
37
40
41 public function __construct(
42 protected InternalDomainService $domain,
43 protected InternalGUIService $gui,
44 protected int $ref_id,
45 protected string $mode,
46 protected int $page_id,
47 protected string $lang,
48 object $parent_gui,
49 string $parent_cmd
50 ) {
51 $this->page_manager = $this->domain->page()->page($ref_id);
52 $this->translations = $this->domain->wiki()->translation($ref_id);
53 parent::__construct($parent_gui, $parent_cmd);
54 }
55
56 protected function getId(): string
57 {
58 return "wiki_pages_" . $this->mode;
59 }
60
61 protected function getTitle(): string
62 {
63 if ($this->mode === self::MODE_WHAT_LINKS_HERE) {
64 return sprintf(
65 $this->domain->lng()->txt("wiki_what_links_to_page"),
66 \ilWikiPage::lookupTitle($this->page_id)
67 );
68 }
69
70 return $this->domain->lng()->txt("wiki_" . $this->mode . "_pages");
71 }
72
73 protected function getRetrieval(): RetrievalInterface
74 {
75 return $this->domain->page()->pagesRetrieval(
76 $this->ref_id,
77 $this->mode,
78 $this->page_id,
79 $this->lang
80 );
81 }
82
83 protected function transformRow(array $data_row): array
84 {
85 $row = [
86 "id" => $data_row["id"],
87 "title" => $this->gui->ui()->factory()->link()->standard(
88 $data_row["title"],
89 $this->page_manager->getPermaLink($data_row["id"], $data_row["lang"] ?? "")
90 )
91 ];
92
93 if ($this->mode === self::MODE_NEW_PAGES) {
94 $row["created"] = new \DateTimeImmutable($data_row["created"]);
95 if ($this->translations->getContentTranslationActivated()) {
96 $row["lang"] = $this->getLanguageLabel($data_row["lang"]);
97 }
98 } elseif ($this->mode === self::MODE_POPULAR_PAGES) {
99 $row["cnt"] = $data_row["cnt"];
100 if ($this->translations->getContentTranslationActivated()) {
101 $row["lang"] = $this->getLanguageLabel($data_row["lang"]);
102 }
103 } elseif ($this->mode === self::MODE_ORPHANED_PAGES) {
104 $row["date"] = new \DateTimeImmutable($data_row["date"]);
105 if ($this->translations->getContentTranslationActivated()) {
106 $row["lang"] = $this->getLanguageLabel($data_row["lang"]);
107 }
108 } elseif ($this->mode !== self::MODE_WHAT_LINKS_HERE) {
109 $row["date"] = new \DateTimeImmutable($data_row["date"]);
110 if ($this->translations->getContentTranslationActivated()) {
111 $row["languages"] = $this->getTranslations($data_row["id"]);
112 }
113 } else {
114 $row["date"] = new \DateTimeImmutable($data_row["date"]);
115 }
116
117 if (isset($data_row["user"])) {
118 $row["user_sort"] = \ilUserUtil::getNamePresentation(
119 $data_row["user"],
120 true,
121 true,
122 $this->gui->ctrl()->getLinkTarget($this->parent_gui, $this->parent_cmd)
123 );
124 }
125
126 return $row;
127 }
128
130 {
131 $lng = $this->domain->lng();
132 $translation_active = $this->translations->getContentTranslationActivated();
133
134 switch ($this->mode) {
136 $table = $table
137 ->dateColumn("created", $lng->txt("created"), true)
138 ->linkColumn("title", $lng->txt("wiki_page"), true);
139 if ($translation_active) {
140 $table = $table->textColumn("lang", $lng->txt("language"));
141 }
142 return $table->textColumn("user_sort", $lng->txt("wiki_created_by"), true);
143
145 $table = $table
146 ->linkColumn("title", $lng->txt("wiki_page"), true);
147 if ($translation_active) {
148 $table = $table->textColumn("lang", $lng->txt("language"));
149 }
150 return $table->textColumn("cnt", $lng->txt("wiki_page_hits"), true);
151
153 $table = $table->linkColumn("title", $lng->txt("wiki_page"), true);
154 if ($translation_active) {
155 $table = $table->textColumn("lang", $lng->txt("language"));
156 }
157 return $table;
158
159 default:
160 $table = $table
161 ->linkColumn("title", $lng->txt("wiki_page"), true)
162 ->dateColumn("date", $lng->txt("wiki_last_changed"), true);
163 if ($translation_active && $this->mode !== self::MODE_WHAT_LINKS_HERE) {
164 $table = $table->textColumn("languages", $lng->txt("wiki_translations"));
165 }
166 return $table->textColumn("user_sort", $lng->txt("wiki_last_changed_by"), true);
167 }
168 }
169
170 protected function getLanguageLabel(string $language): string
171 {
172 $language = $language === "-"
173 ? $this->translations->getBaseLanguage()
174 : $language;
175 return $this->domain->lng()->txt("meta_l_" . $language);
176 }
177
178 protected function getTranslations(int $page_id): string
179 {
180 $languages = array_filter(
181 $this->page_manager->getLanguages($page_id),
182 fn(string $language): bool => in_array(
183 $language,
184 array_map(
185 fn($language): string => $language->getLanguageCode(),
186 $this->translations->getLanguages()
187 ),
188 true
189 )
190 );
191
192 return implode(", ", $languages);
193 }
194}
Class handles translation mode for an object.
textColumn(string $key, string $title, bool $sortable=false)
dateColumn(string $key, string $title, bool $sortable=false)
linkColumn(string $key, string $title, bool $sortable=false)
transformRow(array $data_row)
transform raw data array to table row data array
__construct(protected InternalDomainService $domain, protected InternalGUIService $gui, protected int $ref_id, protected string $mode, protected int $page_id, protected string $lang, object $parent_gui, string $parent_cmd)
static getNamePresentation( $a_user_id, bool $a_user_image=false, bool $a_profile_link=false, string $a_profile_back_link='', bool $a_force_first_lastname=false, bool $a_omit_login=false, bool $a_sortable=true, bool $a_return_data_array=false, $a_ctrl_path=null)
Default behaviour is:
static lookupTitle(int $a_page_id, string $lang="-")
__construct(Container $dic, ilPlugin $plugin)
@inheritDoc
global $lng
Definition: privfeed.php:26