This project does not seem to handle request data directly as such no vulnerable execution paths were found.
include
, or for example
via PHP's auto-loading mechanism.
These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | |||
3 | use Xmf\Database\TableLoad; |
||
4 | use Xmf\Database\Tables; |
||
5 | use Xmf\Request; |
||
6 | |||
7 | /** |
||
8 | * admin/pages.php - manage wiki page revision |
||
9 | * |
||
10 | * @copyright Copyright © 2013 geekwright, LLC. All rights reserved. |
||
11 | * @license gwiki/docs/license.txt GNU General Public License (GPL) |
||
12 | * @since 1.0 |
||
13 | * @author Richard Griffith <[email protected]> |
||
14 | * @package gwiki |
||
15 | */ |
||
16 | include __DIR__ . '/header.php'; |
||
17 | |||
18 | include_once __DIR__ . '/../include/functions.php'; |
||
19 | include_once XOOPS_ROOT_PATH . '/class/xoopsformloader.php'; |
||
20 | |||
21 | $moduleAdmin->displayNavigation(basename(__FILE__)); |
||
22 | |||
23 | /** |
||
24 | * @param $url |
||
25 | * @param $params |
||
26 | */ |
||
27 | function post_clean_request($url, $params) |
||
28 | { |
||
29 | foreach ($params as $key => &$val) { |
||
30 | if (is_array($val)) { |
||
31 | $val = implode(',', $val); |
||
32 | } |
||
33 | $post_params[] = $key . '=' . urlencode($val); |
||
34 | } |
||
35 | $post_string = implode('&', $post_params); |
||
36 | |||
37 | $parts = parse_url($url); |
||
38 | |||
39 | $fp = fsockopen($parts['host'], isset($parts['port']) ? $parts['port'] : 80, $errno, $errstr, 30); |
||
40 | |||
41 | $out = 'POST ' . $parts['path'] . " HTTP/1.1\r\n"; |
||
42 | $out .= 'Host: ' . $parts['host'] . "\r\n"; |
||
43 | $out .= "Content-Type: application/x-www-form-urlencoded\r\n"; |
||
44 | $out .= 'Content-Length: ' . strlen($post_string) . "\r\n"; |
||
45 | $out .= "Connection: Close\r\n\r\n"; |
||
46 | if (isset($post_string)) { |
||
47 | $out .= $post_string; |
||
48 | } |
||
49 | |||
50 | fwrite($fp, $out); |
||
51 | fclose($fp); |
||
52 | } |
||
53 | |||
54 | /** |
||
55 | * @param null $message |
||
56 | */ |
||
57 | function showPages($message = null) |
||
58 | { |
||
59 | global $xoopsDB; |
||
60 | echo <<<EOT |
||
61 | <style> |
||
62 | div.pagination.default {display:inline;} |
||
63 | form {display:inline;} |
||
64 | </style> |
||
65 | EOT; |
||
66 | $total = 0; |
||
67 | $limit = 10; |
||
68 | |||
69 | $start = Request::getInt('start', 0, 'GET'); |
||
70 | $like = Request::getString('like', '', 'GET'); |
||
71 | |||
72 | $sql = 'SELECT COUNT(*) FROM ' . $xoopsDB->prefix('gwiki_pageids'); |
||
73 | if (!empty($like)) { |
||
74 | $sql .= " WHERE keyword LIKE '{$like}%' "; |
||
75 | } |
||
76 | $result = $xoopsDB->query($sql); |
||
77 | if ($result) { |
||
78 | $myrow = $xoopsDB->fetchRow($result); |
||
79 | $total = $myrow[0]; |
||
80 | } |
||
81 | |||
82 | echo '<form method="get"><b>' . _AD_GWIKI_KEYWORD_FILTER . '</b><input type="text" name="like"><input type="submit"></form><br>'; |
||
83 | adminTableStart(_AD_GWIKI_ADMINTITLE, 4); |
||
84 | if (!empty($message)) { |
||
85 | echo '<tr><td colspan="4" align="center"><br><b>' . $message . '</b><br><br></td></tr>'; |
||
86 | } |
||
87 | echo '<tr><th width="15%">' . _AD_GWIKI_KEYWORD . '</th><th>' . _MD_GWIKI_TITLE . '</th><th width="5%">' . _AD_GWIKI_REVISIONS . '</th><th width="30%">' . _AD_GWIKI_ACTION . '</th></tr>'; |
||
88 | $sqlwhere = ''; |
||
89 | if (!empty($like)) { |
||
90 | $sqlwhere = " WHERE t1.keyword LIKE '{$like}%' "; |
||
91 | } |
||
92 | $sql = 'SELECT t1.keyword, COUNT(*), t2.title, t2.admin_lock, t2.active FROM ' . $xoopsDB->prefix('gwiki_pages') . ' t1 ' . ' LEFT JOIN ' . $xoopsDB->prefix('gwiki_pages') |
||
93 | . ' t2 on t1.keyword = t2.keyword and t2.active = 1 ' . $sqlwhere . ' GROUP BY keyword, t2.title, t2.admin_lock, t2.active '; |
||
94 | $result = $xoopsDB->query($sql, $limit, $start); |
||
95 | |||
96 | for ($i = 0, $iMax = $xoopsDB->getRowsNum($result); $i < $iMax; ++$i) { |
||
97 | list($page, $revs, $title, $lock, $active) = $xoopsDB->fetchRow($result); |
||
98 | if (empty($active)) { |
||
99 | $title = _AD_GWIKI_NO_ACTIVE_PAGE; |
||
100 | } |
||
101 | //if(empty($title)) $title=_AD_GWIKI_NO_ACTIVE_PAGE; |
||
102 | if ($lock) { |
||
103 | $lockaction = ' | <a href="pages.php?page=' . $page . '&op=unlock">' . _AD_GWIKI_UNLOCK . '</a>'; |
||
104 | } else { |
||
105 | $lockaction = ' | <a href="pages.php?page=' . $page . '&op=lock">' . _AD_GWIKI_LOCK . '</a>'; |
||
106 | } |
||
107 | echo '<tr class="' . (($i % 2) ? 'even' : 'odd') . '"><td><a href="pages.php?page=' . $page . '&op=history">' . $page . '</a></td>' . '<td>' . htmlspecialchars($title, ENT_QUOTES) . '</td>' |
||
108 | . '<td>' . $revs . '</td>' . '<td><a href="pages.php?page=' . $page . '&op=display">' . _AD_GWIKI_VIEW . '</a> | <a href="pages.php?page=' . $page . '&op=history">' . _AD_GWIKI_HISTORY |
||
109 | . '</a>' . $lockaction . ' | <a href="pages.php?page=' . $page . '&op=delete">' . _DELETE . '</a></td></tr>'; |
||
110 | } |
||
111 | if ($i === 0) { |
||
112 | echo '<tr class="odd"><td colspan="3">' . _AD_GWIKI_EMPTYWIKI . '</td></tr>'; |
||
113 | } |
||
114 | |||
115 | $endarray[_AD_GWIKI_CLEANUPDB] = 'pages.php?op=clean'; |
||
116 | $endarray[_AD_GWIKI_PARTITION] = 'pages.php?op=partition'; |
||
117 | $endarray[_AD_GWIKI_ADD_HELP] = 'pages.php?op=addhelp'; |
||
118 | // set up pagenav |
||
119 | $pager = ''; |
||
120 | if ($total > $limit) { |
||
121 | include_once XOOPS_ROOT_PATH . '/class/pagenav.php'; |
||
122 | $likenav = ''; |
||
123 | if (!empty($like)) { |
||
124 | $likenav = "like={$like}"; |
||
125 | } |
||
126 | $nav = new xoopsPageNav($total, $limit, $start, 'start', $likenav); |
||
127 | View Code Duplication | if ((int)($total / $limit) < 5) { |
|
0 ignored issues
–
show
|
|||
128 | $pager = $nav->renderNav(); |
||
129 | } else { |
||
130 | $pager = _AD_GWIKI_PAGENAV . $nav->renderSelect(false); |
||
131 | } |
||
132 | } |
||
133 | if (!empty($pager)) { |
||
134 | $endarray['!PREFORMATTED!'] = $pager; |
||
135 | } |
||
136 | |||
137 | adminTableEnd($endarray); |
||
138 | } |
||
139 | |||
140 | /** |
||
141 | * @param $page |
||
142 | */ |
||
143 | function showHistory($page) |
||
144 | { |
||
145 | global $xoopsDB, $wikiPage; |
||
146 | |||
147 | allowRestoration($page); |
||
148 | |||
149 | adminTableStart(_AD_GWIKI_ADMINTITLE . ' : ' . $page, 4); |
||
150 | echo '<tr><th>' . _MD_GWIKI_TITLE . '</th><th width="20%">' . _AD_GWIKI_MODIFIED . '</th><th width="10%">' . _AD_GWIKI_AUTHOR . '</th><th width="30%">' . _AD_GWIKI_ACTION . '</th></tr>'; |
||
151 | |||
152 | $sql = 'SELECT gwiki_id, title, body, lastmodified, uid, active, FROM_UNIXTIME(lastmodified) FROM ' . $xoopsDB->prefix('gwiki_pages') |
||
153 | . " WHERE keyword='{$page}' ORDER BY active DESC, lastmodified DESC"; |
||
154 | $result = $xoopsDB->query($sql); |
||
155 | |||
156 | for ($i = 0, $iMax = $xoopsDB->getRowsNum($result); $i < $iMax; ++$i) { |
||
157 | list($id, $title, $body, $lastmodified, $uid, $active, $modified) = $xoopsDB->fetchRow($result); |
||
158 | |||
159 | echo '<tr class="' . (($i % 2) ? 'even' : 'odd') . '"><td><a href="pages.php?page=' . $page . '&op=display&id=' . $id . '">' . htmlspecialchars($title, ENT_QUOTES) . '</a></td>'; |
||
160 | echo '<td>' . $modified . ($active ? '*' : '') . '</td>'; |
||
161 | echo '<td>' . $wikiPage->getUserName($uid) . '</td>'; |
||
162 | echo '<td><a href="pages.php?page=' . $page . '&op=display&id=' . $id . '">' . _AD_GWIKI_VIEW . '</a> | <a href="javascript:restoreRevision(\'' . $id . '\');">' . _AD_GWIKI_RESTORE . '</a> '; |
||
163 | echo ' | <a href="pages.php?page=' . $page . '&op=fix&id=' . $id . '">' . _AD_GWIKI_FIX . '</a> | <a href="pages.php?page=' . $page . '&op=tool&id=' . $id . '">' . _AD_GWIKI_PAGETOOLS |
||
164 | . '</a>'; |
||
165 | echo ' | <a href="../edit.php?page=' . $page . '&id=' . $id . '">' . _EDIT . '</a> </td></tr>'; |
||
166 | } |
||
167 | if ($i === 0) { |
||
168 | echo '<tr class="odd"><td colspan="4">' . _MD_GWIKI_PAGENOTFOUND . '</td></tr>'; |
||
169 | } |
||
170 | |||
171 | adminTableEnd(array(_BACK => 'pages.php?op=manage')); |
||
172 | } |
||
173 | |||
174 | /** |
||
175 | * @param $page |
||
176 | * @param $id |
||
177 | */ |
||
178 | function showPage($page, $id) |
||
179 | { |
||
180 | global $xoopsModuleConfig, $wikiPage, $xoTheme; |
||
181 | |||
182 | $dir = basename(dirname(__DIR__)); |
||
183 | if (is_object($xoTheme)) { |
||
184 | $xoTheme->addStylesheet(XOOPS_URL . '/modules/' . $dir . '/assets/css/module.css'); |
||
185 | } |
||
186 | |||
187 | // xoops_cp_header(); |
||
188 | allowRestoration($page); |
||
189 | |||
190 | $wikiPage->setWikiLinkURL('pages.php?page=%s&op=history'); |
||
191 | $wikiPage->getPage($page, $id); |
||
192 | if (empty($id)) { |
||
193 | $id = $wikiPage->gwiki_id; |
||
194 | } |
||
195 | |||
196 | adminTableStart(_AD_GWIKI_SHOWPAGE, 1); |
||
197 | echo '<tr><td width="100%" >'; |
||
198 | echo '<div style="width: 94%; margin: 2em;">'; |
||
199 | echo '<p style="padding-bottom: 2px; border-bottom: 1px solid #000000;">' . _MD_GWIKI_PAGE . ": <strong>{$page}</strong> - " . _MD_GWIKI_LASTMODIFIED . ' <i>' |
||
200 | . date($xoopsModuleConfig['date_format'], $wikiPage->lastmodified) . '</i> ' . _MD_GWIKI_BY . ' <i>' . $wikiPage->getUserName($wikiPage->uid) . '</i></p>'; |
||
201 | |||
202 | echo '<div id="wikipage"><h1 class="wikititle" id="toc0">' . htmlspecialchars($wikiPage->title) . '</h1>'; |
||
203 | echo $wikiPage->renderPage(); |
||
204 | echo '</div>'; |
||
205 | |||
206 | echo '</div>'; |
||
207 | echo '</td></tr>'; |
||
208 | adminTableEnd(array( |
||
209 | _BACK => "pages.php?page={$page}&op=history", |
||
210 | _AD_GWIKI_RESTORE => "javascript:restoreRevision('{$id}');", |
||
211 | _AD_GWIKI_PAGETOOLS => "pages.php?page={$page}&op=tool&id={$id}", |
||
212 | _AD_GWIKI_FIX => "pages.php?page={$page}&op=fix&id={$id}" |
||
213 | )); |
||
214 | } |
||
215 | |||
216 | /** |
||
217 | * @param $page |
||
218 | * @param $id |
||
219 | */ |
||
220 | function showPageTool($page, $id) |
||
221 | { |
||
222 | global $xoopsModuleConfig, $wikiPage, $xoTheme; |
||
223 | |||
224 | $dir = basename(dirname(__DIR__)); |
||
225 | if (is_object($xoTheme)) { |
||
226 | $xoTheme->addStylesheet(XOOPS_URL . '/modules/' . $dir . '/assets/css/module.css'); |
||
227 | } |
||
228 | |||
229 | // xoops_cp_header(); |
||
230 | allowRestoration($page); |
||
231 | |||
232 | $wikiPage->setWikiLinkURL("javascript:alert('%s');"); |
||
233 | $wikiPage->getPage($page, $id); |
||
234 | |||
235 | $form = new XoopsThemeForm(_AD_GWIKI_PAGETOOLS . ": {$page}", 'gwikiform', "pages.php?page={$page}"); |
||
236 | $form->addElement(new XoopsFormSelectUser('user', 'uid', true, $wikiPage->uid)); |
||
237 | $form->addElement(new XoopsFormDateTime(_MD_GWIKI_LASTMODIFIED, 'lastmodified', $size = 15, $wikiPage->lastmodified)); |
||
238 | $form->addElement(new XoopsFormHidden('op', 'toolupdate')); |
||
239 | $form->addElement(new XoopsFormHidden('page', $page)); |
||
240 | $form->addElement(new XoopsFormHidden('id', $id)); |
||
241 | $form->addElement(new XoopsFormButton('', 'submit', _SUBMIT, 'submit')); |
||
242 | //$form->addElement(new XoopsFormText(_MD_GWIKI_TITLE, "title", 40, 250, $title)); |
||
243 | //$form->addElement(new XoopsFormTextArea(_MD_GWIKI_BODY, 'body', $body, 20, 80)); |
||
244 | //$var_name = strtotime($var_name['date']) + $var_name['time']; |
||
245 | |||
246 | adminTableStart(_AD_GWIKI_PAGETOOLS, 1); |
||
247 | echo '<tr><td width="100%" >'; |
||
248 | echo '<div style="width: 94%; margin: 2em;">'; |
||
249 | echo '<p style="padding-bottom: 2px; border-bottom: 1px solid #000000;">' . _MD_GWIKI_PAGE . ": <strong>{$page}</strong> - " . _MD_GWIKI_LASTMODIFIED . ' <i>' |
||
250 | . date($xoopsModuleConfig['date_format'], $wikiPage->lastmodified) . '</i> ' . _MD_GWIKI_BY . ' <i>' . $wikiPage->getUserName($wikiPage->uid) . '</i></p>'; |
||
251 | echo $form->render(); |
||
252 | echo '<br><div id="wikipage" style="height: 120px; overflow: auto;" ><h1 class="wikititle" id="toc0">' . htmlspecialchars($wikiPage->title) . '</h1>'; |
||
253 | echo $wikiPage->renderPage(); |
||
254 | echo '</div>'; |
||
255 | |||
256 | echo '</div>'; |
||
257 | echo '</td></tr>'; |
||
258 | adminTableEnd(array( |
||
259 | _BACK => "pages.php?page={$page}&op=history", |
||
260 | _AD_GWIKI_RESTORE => "javascript:restoreRevision('{$id}');", |
||
261 | _AD_GWIKI_FIX => "pages.php?page={$page}&op=fix&id={$id}" |
||
262 | )); |
||
263 | } |
||
264 | |||
265 | /** |
||
266 | * @param $page |
||
267 | * @param $id |
||
268 | * |
||
269 | * @return mixed |
||
270 | */ |
||
271 | function pageToolUpdate($page, $id) |
||
272 | { |
||
273 | global $xoopsDB; |
||
274 | |||
275 | if (isset($_POST['uid'])) { |
||
276 | $uid = (int)$_POST['uid']; |
||
277 | } |
||
278 | if (isset($_POST['lastmodified'])) { |
||
279 | $modified = $_POST['lastmodified']; |
||
280 | } |
||
281 | if (empty($uid) || empty($modified)) { |
||
282 | return false; |
||
283 | } |
||
284 | $lastmodified = strtotime($modified['date']) + $modified['time']; |
||
285 | //print_r($modified); |
||
286 | $sql = 'UPDATE ' . $xoopsDB->prefix('gwiki_pages') . " SET uid = {$uid}, lastmodified = {$lastmodified} WHERE keyword='{$page}' AND gwiki_id='{$id}'"; |
||
287 | $result = $xoopsDB->query($sql); |
||
288 | |||
289 | return $result; |
||
290 | } |
||
291 | |||
292 | /** |
||
293 | * @param $action |
||
294 | * @param string $keyword |
||
295 | * @param $id |
||
296 | */ |
||
297 | function confirmAction($action, $keyword = '', $id = -1) |
||
298 | { |
||
299 | adminTableStart(_AD_GWIKI_CONFIRM, 1); |
||
300 | echo '<tr><td width="100%" >'; |
||
301 | echo '<div class="confirmMsg">'; |
||
302 | echo '<form method="post" action="pages.php">'; |
||
303 | |||
304 | switch ($action) { |
||
305 | case 'clean': |
||
306 | echo '<input type="hidden" name="op" value="cleanit" />'; |
||
307 | $confMsg = _AD_GWIKI_CONFIRM_CLEAN; |
||
308 | break; |
||
309 | case 'delete': |
||
310 | echo '<input type="hidden" name="page" value="' . $keyword . '" />'; |
||
311 | echo '<input type="hidden" id="op" name="op" value="deleteit" />'; |
||
312 | $confMsg = sprintf(_AD_GWIKI_CONFIRM_DEL, $keyword); |
||
313 | break; |
||
314 | case 'fix': |
||
315 | echo '<input type="hidden" name="page" value="' . $keyword . '" />'; |
||
316 | echo '<input type="hidden" id="id" name="id" value="' . $id . '" /> |
||
317 | <input type="hidden" id="op" name="op" value="fixit" />'; |
||
318 | $confMsg = sprintf(_AD_GWIKI_CONFIRM_FIX, $keyword); |
||
319 | break; |
||
320 | case 'lock': |
||
321 | echo '<input type="hidden" name="page" value="' . $keyword . '" />'; |
||
322 | echo '<input type="hidden" id="op" name="op" value="lockit" />'; |
||
323 | $confMsg = sprintf(_AD_GWIKI_CONFIRM_LOCK, $keyword); |
||
324 | break; |
||
325 | case 'unlock': |
||
326 | echo '<input type="hidden" name="page" value="' . $keyword . '" />'; |
||
327 | echo '<input type="hidden" id="op" name="op" value="unlockit" />'; |
||
328 | $confMsg = sprintf(_AD_GWIKI_CONFIRM_UNLOCK, $keyword); |
||
329 | break; |
||
330 | case 'partition': |
||
331 | // echo '<input type="hidden" name="page" value="'.$keyword.'" />'; |
||
332 | echo '<input type="hidden" id="op" name="op" value="partitionit" />'; |
||
333 | $confMsg = _AD_GWIKI_CONFIRM_PARTITION; |
||
334 | break; |
||
335 | case 'addhelp': |
||
336 | // echo '<input type="hidden" name="page" value="'.$keyword.'" />'; |
||
337 | echo '<input type="hidden" id="op" name="op" value="addhelpit" />'; |
||
338 | $confMsg = _AD_GWIKI_CONFIRM_ADD_HELP; |
||
339 | break; |
||
340 | } |
||
341 | |||
342 | echo '<p align="center">' . $confMsg . '<br><br> |
||
343 | <input type="submit" value="' . _YES . '"> |
||
344 | <input type="button" onclick="history.back();" value="' . _NO . '"></p></form></div>'; |
||
345 | echo '</td></tr>'; |
||
346 | adminTableEnd(array(_BACK => 'pages.php?op=manage')); |
||
347 | } |
||
348 | |||
349 | /** |
||
350 | * @param $page |
||
351 | * @param $id |
||
352 | * |
||
353 | * @return mixed |
||
354 | */ |
||
355 | function getRevision($page, $id) |
||
356 | { |
||
357 | global $xoopsDB; |
||
358 | |||
359 | $sql = 'SELECT title, body, lastmodified, uid FROM ' . $xoopsDB->prefix('gwiki_pages') . " WHERE gwiki_id='{$id}' AND keyword='{$page}'"; |
||
360 | $result = $xoopsDB->query($sql); |
||
361 | |||
362 | return $xoopsDB->fetchRow($result); |
||
363 | } |
||
364 | |||
365 | /** |
||
366 | * @param $page |
||
367 | * @param $id |
||
368 | * |
||
369 | * @return mixed |
||
370 | */ |
||
371 | function fixRevision($page, $id) |
||
372 | { |
||
373 | global $xoopsDB, $wikiPage; |
||
374 | |||
375 | $result = $wikiPage->setRevision($page, $id); |
||
376 | if ($result) { |
||
377 | $sql = 'DELETE FROM ' . $xoopsDB->prefix('gwiki_pages') . " WHERE keyword='{$page}' AND active=0 "; |
||
378 | $result = $xoopsDB->query($sql); |
||
379 | } |
||
380 | |||
381 | return $result; |
||
382 | } |
||
383 | |||
384 | /** |
||
385 | * @return bool |
||
386 | */ |
||
387 | function checkForPartitions() |
||
388 | { |
||
389 | global $xoopsDB; |
||
390 | |||
391 | $sql = 'SELECT PARTITION_NAME FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_SCHEMA = \'' . XOOPS_DB_NAME . '\' AND TABLE_NAME = \'' . $xoopsDB->prefix('gwiki_pages') . '\''; |
||
392 | $result = $xoopsDB->query($sql); |
||
393 | $partitions = $xoopsDB->getRowsNum($result); |
||
394 | |||
395 | return $partitions > 1; |
||
396 | } |
||
397 | |||
398 | /** |
||
399 | * @return string |
||
400 | */ |
||
401 | function createPartitions() |
||
402 | { |
||
403 | global $xoopsDB; |
||
404 | |||
405 | if (checkForPartitions()) { |
||
406 | $message = _AD_GWIKI_PARTITION_ALREADY; |
||
407 | } else { |
||
408 | $tablename = $xoopsDB->prefix('gwiki_pages'); |
||
409 | $sql = 'ALTER TABLE ' . $tablename . ' PARTITION BY LIST (active) '; |
||
410 | $sql .= '(PARTITION ' . $tablename . '_inactive VALUES IN (0), '; |
||
411 | $sql .= ' PARTITION ' . $tablename . '_active VALUES IN (1) )'; |
||
412 | $result = $xoopsDB->query($sql); |
||
413 | $message = _AD_GWIKI_PARTITION_FAILED; |
||
414 | if ($result) { |
||
415 | $message = _AD_GWIKI_PARTITION_OK; |
||
416 | } |
||
417 | } |
||
418 | |||
419 | return $message; |
||
420 | } |
||
421 | |||
422 | /** |
||
423 | * @return string |
||
424 | */ |
||
425 | function createHelpPages() |
||
426 | { |
||
427 | // make any existing help pages inactive |
||
428 | $criteria = new Criteria('page_set_home', 'Help:Index', '='); |
||
429 | if (0 < TableLoad::countRows('gwiki_pages', $criteria)) { |
||
430 | $migrate = new Tables(); |
||
431 | $values = array('active' => '0'); |
||
432 | $migrate->useTable('gwiki_pages'); |
||
433 | $migrate->update('gwiki_pages', $values, $criteria); |
||
434 | $migrate->executeQueue(true); |
||
435 | } |
||
436 | |||
437 | // delete help: to help: page links |
||
438 | $criteria = new CriteriaCompo(new Criteria('from_keyword', 'help:%', 'LIKE')); |
||
439 | $criteria->add(new Criteria('to_keyword', 'help:%', 'LIKE'), 'AND'); |
||
440 | if (0 < TableLoad::countRows('gwiki_pagelinks', $criteria)) { |
||
441 | $migrate = new Tables(); |
||
442 | $migrate->useTable('gwiki_pagelinks'); |
||
443 | $migrate->delete('gwiki_pagelinks', $criteria); |
||
444 | $migrate->executeQueue(true); |
||
445 | } |
||
446 | |||
447 | // load fresh help pages |
||
448 | $result = TableLoad::loadTableFromYamlFile('gwiki_pages', '../sql/helppages.yml'); |
||
449 | $message = _AD_GWIKI_ADD_HELP_FAILED; |
||
450 | if ($result) { |
||
451 | $result = TableLoad::loadTableFromYamlFile('gwiki_pagelinks', '../sql/helplinks.yml'); |
||
452 | if ($result) { |
||
453 | $message = _AD_GWIKI_ADD_HELP_OK; |
||
454 | } |
||
455 | } |
||
456 | |||
457 | // make sure the new help pages have an entry in pageids (for comments, notifications, etc) |
||
458 | $criteria = new CriteriaCompo(new Criteria('page_set_home', 'Help:Index', '=')); |
||
459 | $criteria->add(new Criteria('active', '1', '='), 'AND'); |
||
460 | $rows = TableLoad::extractRows('gwiki_pages', $criteria, array('body', 'search_body', 'toc_cache')); |
||
461 | $insertRows = array(); |
||
462 | $time = time(); |
||
463 | foreach ($rows as $row) { |
||
464 | $insertRows[] = array('keyword' => $row['keyword'], 'created' => $time, 'hit_count' => '0'); |
||
465 | } |
||
466 | TableLoad::loadTableFromArray('gwiki_pageids', $insertRows); |
||
467 | |||
468 | return $message; |
||
469 | } |
||
470 | |||
471 | /** |
||
472 | * @param $page |
||
473 | */ |
||
474 | function allowRestoration($page) |
||
475 | { |
||
476 | echo '<script type="text/javascript"> |
||
477 | <!-- |
||
478 | function restoreRevision(id) |
||
479 | { |
||
480 | document.restore.id.value = id; |
||
481 | document.restore.submit(); |
||
482 | } |
||
483 | // --> |
||
484 | </script> |
||
485 | <form id="restore" name="restore" action="pages.php" method="post"> |
||
486 | <input type="hidden" id="op" name="op" value="restore" /> |
||
487 | <input type="hidden" id="page" name="page" value="' . $page . '" /> |
||
488 | <input type="hidden" id="id" name="id" value="" /> |
||
489 | </form>'; |
||
490 | } |
||
491 | |||
492 | // page, op, id |
||
493 | $page = Request::getString('page', '', 'GET'); |
||
494 | $op = Request::getCmd('op', '', 'GET'); |
||
495 | |||
496 | // $_POST variables we use |
||
497 | $op = Request::getCmd('op', $op, 'POST'); |
||
498 | $page = Request::getString('page', $page, 'POST'); |
||
499 | $id = Request::getInt('id', 0, 'POST'); |
||
500 | |||
501 | switch ($op) { |
||
502 | case 'history': |
||
503 | showHistory($page); |
||
504 | break; |
||
505 | |||
506 | case 'display': |
||
507 | $id = Request::getInt('id', null, 'GET'); |
||
508 | showPage($page, $id); |
||
509 | break; |
||
510 | |||
511 | View Code Duplication | case 'restore': |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
512 | $success = $wikiPage->setRevision($page, $id); |
||
513 | redirect_header('pages.php?page=' . $page . '&op=history', 2, $success ? _MD_GWIKI_DBUPDATED : _MD_GWIKI_ERRORINSERT); |
||
514 | break; |
||
515 | |||
516 | case 'fix': |
||
517 | confirmAction('fix', $page, Request::getInt('id', 0, 'GET')); |
||
518 | break; |
||
519 | |||
520 | View Code Duplication | case 'fixit': |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
521 | $success = fixRevision($page, $id); |
||
522 | redirect_header('pages.php?page=' . $page . '&op=history', 2, $success ? _MD_GWIKI_DBUPDATED : _MD_GWIKI_ERRORINSERT); |
||
523 | break; |
||
524 | |||
525 | case 'tool': |
||
526 | showPageTool($page, Request::getInt('id', 0, 'GET')); |
||
527 | break; |
||
528 | |||
529 | case 'toolupdate': |
||
530 | $success = pageToolUpdate($page, $id); |
||
531 | $message = $success ? _MD_GWIKI_DBUPDATED : _MD_GWIKI_ERRORINSERT; |
||
532 | $op = ''; |
||
533 | showPages($message); |
||
534 | break; |
||
535 | |||
536 | case 'delete': |
||
537 | confirmAction('delete', $page); |
||
538 | break; |
||
539 | |||
540 | View Code Duplication | case 'deleteit': |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
541 | // mark all versions inactive -- these will disappear as they age and the database is cleaned |
||
542 | $sql = 'UPDATE ' . $xoopsDB->prefix('gwiki_pages') . " SET active = 0 WHERE keyword='{$page}' "; |
||
543 | |||
544 | $success = $xoopsDB->query($sql); |
||
545 | redirect_header('pages.php?op=manage', 2, $success ? _MD_GWIKI_DBUPDATED : _MD_GWIKI_ERRORINSERT); |
||
546 | break; |
||
547 | |||
548 | case 'clean': |
||
549 | confirmAction('clean'); |
||
550 | break; |
||
551 | |||
552 | case 'cleanit': |
||
553 | // delete inactive pages older than config option retain_days |
||
554 | $retaindays = (int)$xoopsModuleConfig['retain_days']; |
||
555 | if ($retaindays > 0) { |
||
556 | $dir = basename(dirname(__DIR__)); |
||
557 | $url = XOOPS_URL . '/modules/' . $dir . '/cleanit.php'; |
||
558 | $params = array('check' => $retaindays); |
||
559 | post_clean_request($url, $params); |
||
560 | $message = _MD_GWIKI_CLEAN_STARTED; |
||
561 | } else { |
||
562 | $message = _MD_GWIKI_CLEAN_DISABLED; |
||
563 | } |
||
564 | $op = ''; |
||
565 | showPages($message); |
||
566 | break; |
||
567 | |||
568 | case 'lock': |
||
569 | confirmAction('lock', $page); |
||
570 | break; |
||
571 | |||
572 | View Code Duplication | case 'lockit': |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
573 | $sql = 'UPDATE ' . $xoopsDB->prefix('gwiki_pages') . " SET admin_lock = 1 WHERE keyword='{$page}' "; |
||
574 | |||
575 | $success = $xoopsDB->query($sql); |
||
576 | redirect_header('pages.php?op=manage', 2, $success ? _MD_GWIKI_DBUPDATED : _MD_GWIKI_ERRORINSERT); |
||
577 | break; |
||
578 | |||
579 | case 'unlock': |
||
580 | confirmAction('unlock', $page); |
||
581 | break; |
||
582 | |||
583 | View Code Duplication | case 'unlockit': |
|
0 ignored issues
–
show
This code seems to be duplicated across your project.
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation. You can also find more detailed suggestions in the “Code” section of your repository. ![]() |
|||
584 | $sql = 'UPDATE ' . $xoopsDB->prefix('gwiki_pages') . " SET admin_lock = 0 WHERE keyword='{$page}' "; |
||
585 | |||
586 | $success = $xoopsDB->query($sql); |
||
587 | redirect_header('pages.php?op=manage', 2, $success ? _MD_GWIKI_DBUPDATED : _MD_GWIKI_ERRORINSERT); |
||
588 | break; |
||
589 | |||
590 | case 'partition': |
||
591 | if (checkForPartitions()) { |
||
592 | showPages(_AD_GWIKI_PARTITION_ALREADY); |
||
593 | } else { |
||
594 | confirmAction('partition', ''); |
||
595 | } |
||
596 | break; |
||
597 | |||
598 | case 'partitionit': |
||
599 | $message = createPartitions(); |
||
600 | showPages($message); |
||
601 | break; |
||
602 | |||
603 | case 'addhelp': |
||
604 | confirmAction('addhelp', ''); |
||
605 | break; |
||
606 | |||
607 | case 'addhelpit': |
||
608 | $message = createHelpPages(); |
||
609 | showPages($message); |
||
610 | break; |
||
611 | |||
612 | case 'manage': |
||
613 | default: |
||
614 | showPages(); |
||
615 | break; |
||
616 | |||
617 | } |
||
618 | |||
619 | include __DIR__ . '/footer.php'; |
||
620 |
Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.
You can also find more detailed suggestions in the “Code” section of your repository.