1 <?php
2
3 4 5
6 class rex_article_cache
7 {
8 9 10 11 12 13 14 15 16
17 public static function delete($id, $clang = null)
18 {
19
20 if ($id < 0) {
21 return false;
22 }
23
24 foreach (rex_clang::getAllIds() as $_clang) {
25 if ($clang !== null && $clang != $_clang) {
26 continue;
27 }
28
29 self::deleteMeta($id, $clang);
30 self::deleteContent($id, $clang);
31 }
32 self::deleteLists($id);
33
34 return true;
35 }
36
37 38 39 40 41 42 43 44 45
46 public static function deleteMeta($id, $clang = null)
47 {
48
49 if ($id < 0) {
50 return false;
51 }
52
53 $cachePath = rex_path::addonCache('structure');
54
55 foreach (rex_clang::getAllIds() as $_clang) {
56 if ($clang !== null && $clang != $_clang) {
57 continue;
58 }
59
60 rex_file::delete($cachePath . $id . '.' . $_clang . '.article');
61 rex_article::clearInstance([$id, $_clang]);
62 rex_category::clearInstance([$id, $_clang]);
63 }
64
65 return true;
66 }
67
68 69 70 71 72 73 74 75 76
77 public static function deleteContent($id, $clang = null)
78 {
79
80 if ($id < 0) {
81 return false;
82 }
83
84 $cachePath = rex_path::addonCache('structure');
85
86 foreach (rex_clang::getAllIds() as $_clang) {
87 if ($clang !== null && $clang != $_clang) {
88 continue;
89 }
90
91 rex_file::delete($cachePath . $id . '.' . $_clang . '.content');
92 }
93
94 return true;
95 }
96
97 98 99 100 101 102 103 104
105 public static function deleteLists($id)
106 {
107
108 if ($id < 0) {
109 return false;
110 }
111
112 $cachePath = rex_path::addonCache('structure');
113
114 foreach (['alist', 'clist'] as $list) {
115 rex_file::delete($cachePath . $id . '.' . $list);
116 rex_structure_element::clearInstanceList([$id, $list]);
117 }
118
119 return true;
120 }
121
122 123 124 125 126 127 128 129
130 public static function generateMeta($article_id, $clang = null)
131 {
132
133 if ($article_id <= 0) {
134 return false;
135 }
136
137 $qry = 'SELECT * FROM ' . rex::getTablePrefix() . 'article WHERE id=' . (int) $article_id;
138 if ($clang !== null) {
139 $qry .= ' AND clang_id=' . (int) $clang;
140 }
141
142 $sql = rex_sql::factory();
143 $sql->setQuery($qry);
144 $fieldnames = $sql->getFieldnames();
145 foreach ($sql as $row) {
146 $_clang = $row->getValue('clang_id');
147
148
149 $params = ['last_update_stamp' => time()];
150 foreach ($fieldnames as $field) {
151 switch ($field) {
152 case 'createdate':
153 case 'updatedate':
154 $params[$field] = $row->getDateTimeValue($field);
155 break;
156 default:
157 $params[$field] = $row->getValue($field);
158 }
159 }
160
161 $article_file = rex_path::addonCache('structure', "$article_id.$_clang.article");
162 if (rex_file::putCache($article_file, $params) === false) {
163 return rex_i18n::msg('article_could_not_be_generated') . ' ' . rex_i18n::msg('check_rights_in_directory') . rex_path::addonCache('structure');
164 }
165 }
166
167 return true;
168 }
169
170 171 172 173 174 175 176
177 public static function generateLists($parent_id)
178 {
179
180 if ($parent_id < 0) {
181 return false;
182 }
183
184
185
186 $GC = rex_sql::factory();
187
188 $GC->setQuery('select * from ' . rex::getTablePrefix() . 'article where clang_id=:clang AND ((parent_id=:id and startarticle=0) OR (id=:id and startarticle=1)) order by priority,name', ['id' => $parent_id, 'clang' => rex_clang::getStartId()]);
189
190 $cacheArray = [];
191 foreach ($GC as $row) {
192 $cacheArray[] = (int) $row->getValue('id');
193 }
194
195 $article_list_file = rex_path::addonCache('structure', $parent_id . '.alist');
196 if (rex_file::putCache($article_list_file, $cacheArray) === false) {
197 return rex_i18n::msg('article_could_not_be_generated') . ' ' . rex_i18n::msg('check_rights_in_directory') . rex_path::addonCache('structure');
198 }
199
200
201
202 $GC = rex_sql::factory();
203 $GC->setQuery('select * from ' . rex::getTablePrefix() . 'article where parent_id=:id and clang_id=:clang and startarticle=1 order by catpriority,name', ['id' => $parent_id, 'clang' => rex_clang::getStartId()]);
204
205 $cacheArray = [];
206 foreach ($GC as $row) {
207 $cacheArray[] = (int) $row->getValue('id');
208 }
209
210 $article_categories_file = rex_path::addonCache('structure', $parent_id . '.clist');
211 if (rex_file::putCache($article_categories_file, $cacheArray) === false) {
212 return rex_i18n::msg('article_could_not_be_generated') . ' ' . rex_i18n::msg('check_rights_in_directory') . rex_path::addonCache('structure');
213 }
214
215 return true;
216 }
217 }
218