dbXapp 2.0
RAD, CMS, Module und Runtime-IDE fuer dbXapp
Loading...
Searching...
No Matches
dbxContentPermalinkIndex.class.php
Go to the documentation of this file.
1<?php
2namespace dbx\dbxContent;
3
4require_once __DIR__ . '/dbxContentLng.class.php';
5require_once __DIR__ . '/dbxContentPageCache.class.php';
6require_once __DIR__ . '/dbxContentRenderer.class.php';
7
17
19 public static function indexPath(string $lng = ''): string {
20 $lng = self::safeLng($lng);
21 return dbxContentPageCache::baseDir() . 'meta/permalinks_' . $lng . '.json';
22 }
23
25 public static function homePath(string $lng = ''): string {
26 $lng = self::safeLng($lng);
27 return dbxContentPageCache::baseDir() . 'meta/home_' . $lng . '.json';
28 }
29
30 private static function safeLng(string $lng = ''): string {
31 if ($lng === '') {
32 $lng = trim((string) dbx()->get_system_var('dbx_lng', 'de'));
33 }
34 $lng = strtolower(trim($lng));
35 return preg_match('/^[a-z]{2,3}$/', $lng) ? $lng : 'de';
36 }
37
38 public static function normalizePermalink(string $permalink): string {
39 $permalink = trim(str_replace('\\', '/', $permalink), '/');
40 return strtolower($permalink);
41 }
42
43 private static function pageRights(array $row, dbxContentRenderer $renderer): string {
44 $folderRights = trim($renderer->getPublicFolderRights((int)($row['folder'] ?? 0)));
45 return $folderRights !== '' ? $folderRights : '*';
46 }
47
48 private static function routeFromRow(array $row, dbxContentRenderer $renderer): ?array {
49 $cid = (int)($row['id'] ?? 0);
50 $permalink = self::normalizePermalink((string)($row['permalink'] ?? ''));
51 if ($cid <= 0 || $permalink === '') {
52 return null;
53 }
54
55 return array(
56 'cid' => $cid,
57 'rights' => self::pageRights($row, $renderer),
58 'activ' => (int)($row['activ'] ?? 1),
59 'permalink' => $permalink,
60 );
61 }
62
63 private static function withLanguage(string $lng, callable $callback) {
64 $lng = self::safeLng($lng);
65 $previous = trim((string) dbx()->get_system_var('dbx_lng', 'de'));
66 $changed = $previous !== $lng;
67 if ($changed) {
68 dbx()->set_system_var('dbx_lng', $lng);
69 }
70
71 try {
72 return $callback($lng);
73 } finally {
74 if ($changed) {
75 dbx()->set_system_var('dbx_lng', $previous !== '' ? $previous : 'de');
76 }
77 }
78 }
79
81 public static function load(string $lng = ''): array {
82 return (array) self::withLanguage($lng, static function(string $activeLng): array {
83 $db = dbx()->get_system_obj('dbxDB');
84 if (!is_object($db)) {
85 return array();
86 }
87
88 $rows = $db->select(
89 dbxContentLng::ddContent($activeLng),
90 '1=1',
91 'id,permalink,folder,activ',
92 'id',
93 'ASC',
94 '',
95 0,
96 0,
97 0
98 );
99 if (!is_array($rows)) {
100 return array();
101 }
102
103 $renderer = new dbxContentRenderer();
104 $result = array();
105 foreach ($rows as $row) {
106 if (!is_array($row)) {
107 continue;
108 }
109 $route = self::routeFromRow($row, $renderer);
110 if (is_array($route)) {
111 $result[$route['permalink']] = $route;
112 }
113 }
114 return $result;
115 });
116 }
117
119 public static function save(array $data, string $lng = ''): bool {
120 return true;
121 }
122
123 public static function upsertPage(int $cid, string $permalink, string $rights, int $activ = 1, string $lng = ''): void {
124 // Die Content-Speicherroutine hat den Datensatz bereits aktualisiert.
125 }
126
127 public static function removeByCid(int $cid, string $lng = ''): void {
128 // Kein separater Permalink-Index vorhanden.
129 }
130
131 public static function removeByPermalink(string $permalink, string $lng = ''): void {
132 // Kein separater Permalink-Index vorhanden.
133 }
134
136 public static function resolve(string $permalink, string $lng = ''): ?array {
137 $permalink = self::normalizePermalink($permalink);
138 if ($permalink === '') {
139 return null;
140 }
141
142 return self::withLanguage($lng, static function(string $activeLng) use ($permalink): ?array {
143 $db = dbx()->get_system_obj('dbxDB');
144 if (!is_object($db)) {
145 return null;
146 }
147
148 $row = $db->select1(
149 dbxContentLng::ddContent($activeLng),
150 array('permalink' => $permalink),
151 'id,permalink,folder,activ',
152 0
153 );
154 if (!is_array($row) || (int)($row['id'] ?? 0) <= 0) {
155 return null;
156 }
157
158 return self::routeFromRow($row, new dbxContentRenderer());
159 });
160 }
161
162 public static function writeHomeCid(int $cid, string $lng = ''): void {
163 // Die sprachabhaengige Startseite wird bei Bedarf live aufgeloest.
164 }
165
166 public static function readHomeCid(string $lng = ''): int {
167 return 0;
168 }
169}
static ddContent(string $lng='')
if( $syncRequest)
Definition index.php:520
DBX schema administration.
if(! $db->connect_db_server($server)) $result