function admAnswerRename(&$session) { global $rename_oldname, $rename_newname, $rename_rename, $rename_backlinks; $session->trace(TC_Gui1, 'admAnswerRename'); $message = null; $origin = isset($rename_newname) ? $rename_newname : null; if (!isset($rename_oldname)) { $message = '+++ kein bisheriger Name angegeben!'; } elseif (($page_id = dbPageId($session, $rename_oldname)) <= 0) { $message = '+++ Seite ' . $rename_oldname . ' existiert nicht'; } elseif (isset($rename_rename) && !isset($rename_newname)) { $message = '+++ kein neuer Name angegeben!'; } elseif (isset($rename_rename) && ($rename_newname = normalizeWikiName($session, $rename_newname)) != $origin) { $message = '+++ Unzulässiger neuer Name (' . $origin . ') wurde korrigiert'; } elseif (isset($rename_rename) && dbPageId($session, $rename_newname) > 0) { $message = '+++ Seite ' . $rename_newname . ' existiert schon!'; } elseif (isset($rename_rename)) { dbUpdate($session, T_Page, $page_id, 'name=' . dbSQLString($session, $rename_newname) . ','); $message = 'Seite ' . $rename_oldname . ' wurde in ' . $rename_newname . ' umbenannt.'; $pages = 0; $hits = 0; if ($rename_backlinks == C_CHECKBOX_TRUE) { $row = dbFirstRecord($session, 'select id,text from ' . dbTable($session, T_Text) . ' where replacedby is null and text like ' . dbSqlString($session, "%{$rename_oldname}%")); $pattern1 = '/([^' . CL_WikiName . '])' . $rename_oldname . '([^' . CL_WikiName . '])/'; $pattern2 = '/^' . $rename_oldname . '([^' . CL_WikiName . '])/'; $pattern3 = '/([^' . CL_WikiName . '])' . $rename_oldname . '$/'; $replacement1 = '\\1' . $rename_newname . '\\2'; $replacement2 = $rename_newname . '\\1'; $replacement3 = '\\1' . $rename_newname; while ($row) { $text = $row[1]; $count1 = preg_match_all($pattern1, $row[1], $dummy); if ($count1 > 0) { $text = preg_replace($pattern1, $replacement1, $text); } $count2 = preg_match($pattern2, $row[1]); if ($count2 > 0) { $text = preg_replace($pattern2, $replacement2, $text); } $count3 = preg_match($pattern3, $text); if ($count3 > 0) { $text = preg_replace($pattern3, $replacement3, $text); } if ($count1 + $count2 + $count3 > 0) { dbUpdate($session, T_Text, $row[0], 'text=' . dbSQLString($session, $text) . ','); $pages++; $hits += $count1 + $count2 + $count3; } $row = dbNextRecord($session); } if ($pages > 0) { $message .= '<br>Es wurde' . ($hits == 1 ? ' ' : 'n ') . $hits . ($hits == 1 ? ' Verweis auf ' : ' Verweise auf ') . $pages . ($pages == 1 ? ' Seite umbenannt.' : ' Seiten umbenannt.'); } } addSystemMessage($session, $rename_oldname . ' >> ' . $rename_newname . ': ' . (0 + $hits)); $rename_oldname = ''; $rename_newname = ''; } admRename($session, $message); }
function dbGetAndStoreMacroPattern(&$session) { $session->trace(TC_Db2, 'dbGetAndStoreMacroPattern:'); $theme = $session->fUserTheme; $pattern = dbGetParam($session, $theme, Th_MacroPattern); if (empty($pattern)) { $row = dbFirstRecord($session, 'select name from ' . dbTable($session, T_Macro) . ' where theme=' . Theme_All . ' or theme=' . ($theme + 0) . ' order by name'); $last_var = null; $open_parenthesis = false; while ($row) { $pos = strpos($row[0], ':'); if ($pos <= 0) { $val = $row[0]; $var = null; } else { $var = substr($row[0], 0, $pos + 1); $val = substr($row[0], $pos + 1); } $session->trace(TC_Db3, 'dbGetAndStoreMacroPattern-2: ' . $pos . ' ' . $var . ' / ' . $val); if ($var != $last_var) { $session->trace(TC_Db2, 'dbGetAndStoreMacroPattern-3: '); if ($open_parenthesis) { $session->trace(TC_Db2, 'dbGetAndStoreMacroPattern-4: '); $pattern .= ')'; $open_parenthesis = false; } $last_var = $var; if (!empty($var)) { $session->trace(TC_Db2, 'dbGetAndStoreMacroPattern-5: ' . $pattern); $val = $var . '(' . $val; $open_parenthesis = true; } } $new = '|' . $val; if (getPos($pattern, $new . '|') < 0) { $pattern .= $new; } $row = dbNextRecord($session); } if ($open_parenthesis) { $pattern .= ')'; } $id = dbSingleValue($session, 'select id from ' . dbTable($session, T_Param) . ' where theme=' . (0 + $theme) . ' and pos=' . Th_MacroPattern); if ($id > 0) { dbUpdateRaw($session, T_Param, $id, 'text=' . dbSqlString($session, $pattern)); $session->trace(TC_Db1, "dbGetAndStoreMacroPattern: Id: {$id} Th: {$theme} P: {$pattern}"); } } return $pattern; }
function guiShowTable(&$session, $headline, $header, $query, $always, $table_properties) { $session->trace(TC_Gui1, 'guiShowTable'); $has_table = false; $row = dbFirstRecord($session, $query); if ($always || $row) { $has_table = true; if ($headline) { echo $headline . "\n"; } echo "<table {$table_properties}>\n"; if ($header) { echo '<tr>'; for ($ii = 0; $ii < count($header); $ii++) { echo '<td><b>' . htmlentities($header[$ii]) . '</b></td>'; } echo "</tr>\n"; } } while ($row) { echo '<tr>'; for ($ii = 0; $ii < count($row); $ii++) { echo '<td>' . htmlentities($row[$ii]) . '</td>'; } echo "</tr>\n"; $row = dbNextRecord($session); } if ($has_table) { echo "</table>\n"; } }
function guiShowTable(&$session, $headline, $header, $query, $always, $table_properties) { $session->trace(TC_Gui1, 'guiShowTable'); $has_table = false; $row = dbFirstRecord($session, $query); if ($always || $row) { $has_table = true; if ($headline) { echo $headline . "\n"; } echo TAG_TABLE_OPEN; echo $table_properties; echo TAG_SUFFIX_NEWLINE; if ($header) { echo TAG_TABLE_RECORD; for ($ii = 0; $ii < count($header); $ii++) { echo TAG_TABLE_DELIM_BOLD; echo htmlentities($header[$ii]); echo TAG_TABLE_BOLD_DELIM_END; } echo TAG_TABLE_DELIM_END; } } while ($row) { echo TAG_TABLE_RECORD; for ($ii = 0; $ii < count($row); $ii++) { echo TAG_TABLE_DELIM; echo htmlentities($row[$ii]); echo TAG_TABLE_DELIM_END; } echo TAG_TABLE_RECORD_END; $row = dbNextRecord($session); } if ($has_table) { echo TAG_TABLE_END; } }
function baseLastChanges(&$session) { $headline = 'Übersicht über die letzten Änderungen'; guiStandardHeader($session, $headline, Th_StandardHeader, Th_StandardBodyStart); if (!isset($_POST['last_days']) || $_POST['last_days'] < 1) { $_POST['last_days'] = 7; } guiStartForm($session); outParagraph($session); echo 'Zeitraum: die letzten '; outTextField($session, 'last_days', $_POST['last_days'], 3, 4); echo ' Tage '; outButton($session, 'last_refresh', 'Aktualisieren'); outParagraphEnd($session); outTable(); for ($day = 0; $day <= $_POST['last_days']; $day++) { $date = localtime(time() - $day * 86400); $time_0 = strftime('%Y.%m.%d', time() - $day * 86400); $time_2 = mktime(0, 0, 0, $date[4] + 1, $date[3], $date[5]); $time_1 = dbSqlDateTime($session, $time_2); $condition = 't.createdat>=' . $time_1 . ' and t.createdat<=' . str_replace('00:00:00', '23:59:59', $time_1); $rec = dbFirstRecord($session, 'select t.id,p.name,t.createdby,t.createdat,t.replacedby,p.id from ' . dbTable($session, T_Text) . ' t, ' . dbTable($session, T_Page) . ' p where p.id=t.page and ' . $condition . ' order by createdat desc'); if ($rec) { outTableRecord(); outTableCellStrong($time_0); outTableRecordEnd(); do { $text_id = $rec[0] + 0; $page_id = $rec[5] + 0; $page_name = $rec[1]; $page_link = encodeWikiName($session, $page_name); outTableRecord(); outTableCell(dbSingleValue($session, 'select min(id) from ' . dbTable($session, T_Text) . ' where page=' . $page_id) == $text_id ? 'Neu' : 'Änderung'); outTableInternLink($session, null, $page_link . '?action=' . A_ShowText . '&page_id=' . $page_id . '&text_id=' . $text_id, $text_id); outTableInternLink($session, null, $page_link, $page_name); outTableAuthorLink($session, $rec[2]); outTableCell(dbSqlDateToText($session, $rec[3])); $pred_rec = dbSingleValue($session, 'select max(id) from ' . dbTable($session, T_Text) . ' where page=' . $page_id . ' and createdat<' . dbSqlDateTime($session, $time_2)); if ($pred_rec > 0) { outTableInternLink($session, null, $page_link . '?action=' . A_Diff . '&text_id=' . $text_id . '&text_id2=' . $pred_rec, 'Unterschied zum Vortag (' . $pred_rec . ')'); } outTableRecordEnd(); } while (($rec = dbNextRecord($session)) != null); } } outTableEnd(); guiStandardBodyEnd($session, Th_StandardBodyEnd); }
function forumSearch(&$session, $with_text, $condition, $to_find) { global $search_maxhits; $session->trace(TC_Gui2, 'forumSearch'); $rc = ''; $row = dbFirstRecord($session, 'select id,subject,author,createdat,top,forum' . ($with_text ? ',text from ' : ' from ') . dbTable($session, T_Posting) . ' where ' . $condition . ' order by changedat desc limit ' . $search_maxhits); if (!$row) { $rc = '+++ keine passenden Seiten gefunden'; } else { $rc = '<table border="1"><tr><td><b>Nr</b></td><td><b>Forum</b></td>' . '<td>Titel</b></td><td><b>Autor</b></td><td><b>geschrieben am</b></td>' . '<td><b>Typ</b></td>' . ($with_text ? '<td><b>Fundstelle</b></td>' : '') . '</tr>'; $no = 0; while ($row) { $rc .= "\n<tr><td>" . ++$no . '</td><td>' . dbForumName($session, $row[5], true) . '</td><td>' . guiInternLinkString($session, P_Thread . '?action=' . A_ShowThread . '&posting_id=' . $row[0] . '&forum_id=' . $row[5], $row[1]) . '</td><td>' . htmlentities($row[2]) . '</td><td>' . dbSqlDateToText($session, $row[3]) . '</td><td>' . (empty($row[4]) ? 'Thema' : 'Antwort'); if ($with_text) { $rc .= '</td><td>' . findTextInLine($row[6], $to_find, 3); } $rc .= '</td></tr>'; $row = dbNextRecord($session); } $rc .= "\n</table>\n"; } return $rc; }
function admSaveTable(&$session, $table, $ignore_id, &$file) { $session->trace(TC_Gui1, 'admSaveTable: ' . $table); $bytes = 0; if (!dbGetTableInfo($session, $table, $names, $types, $is_string, $max_lengths, $ix_primary)) { $session->trace(TC_Error, 'admSaveTable: keine Metainfo'); $bytes = -1; } $header = 'insert into ' . $table . ' (' . join(',', $ignore_id ? array_splice($names, $ix_primary, 1) : $names) . ') values ('; if ($bytes == 0 && ($row = dbFirstRecord($session, 'select * from ' . $table . ' where 1'))) { do { $line = $header; $no = 0; for ($ix = 0; $ix < count($row); $ix++) { if (!$ignore_id || $ix != $ix_primary) { if ($no++ > 0) { $line .= ','; } if ($row[$ix] == null) { $line .= 'NULL'; } else { $line .= $is_string[$ix] ? dbSqlString($session, $row[$ix]) : 0 + $row[$ix]; } } } $line .= ');'; $bytes += fwrite($file, $line); $bytes += fwrite($file, "\r\n"); } while ($row = dbNextRecord($session)); } return $bytes; }
function dbGetThemes(&$session, &$names, &$numbers) { $names = array(); $numbers = array(); if ($row = dbFirstRecord($session, 'select theme,text from ' . dbTable($session, T_Param) . ' where pos=' . Th_ThemeName . ' and theme>=' . Theme_Standard . ' order by theme')) { do { array_push($names, $row[1]); array_push($numbers, $row[0]); } while ($row = dbNextRecord($session)); } }
function baseLastChanges(&$session) { global $last_days; $headline = 'Übersicht über die letzten Änderungen'; guiStandardHeader($session, $headline, Th_StandardHeader, Th_StandardBodyStart); if (!isset($last_days) || $last_days < 1) { $last_days = 7; } guiStartForm($session); echo '<p>Zeitraum: die letzten '; guiTextField('last_days', $last_days, 3, 4); echo ' Tage '; guiButton('last_refresh', 'Aktualisieren'); echo '</p>' . "\n"; echo '<table border="0">' . "\n"; for ($day = 0; $day <= $last_days; $day++) { $date = localtime(time() - $day * 86400); $time_0 = strftime('%Y.%m.%d', time() - $day * 86400); $time_2 = mktime(0, 0, 0, $date[4] + 1, $date[3], $date[5]); $time_1 = dbSqlDateTime($session, $time_2); $condition = 't.createdat>=' . $time_1 . ' and t.createdat<=' . str_replace('00:00:00', '23:59:59', $time_1); $rec = dbFirstRecord($session, 'select t.id,p.name,t.createdby,t.createdat,t.replacedby,p.id from ' . dbTable($session, T_Text) . ' t, ' . dbTable($session, T_Page) . ' p where p.id=t.page and ' . $condition . ' order by createdat desc'); if ($rec) { echo '<tr><td><b>'; echo $time_0; echo '</b></td></tr>' . "\n"; do { echo '<tr><td>'; echo dbSingleValue($session, 'select min(id) from ' . dbTable($session, T_Text) . ' where page=' . $rec[5]) == $rec[0] ? 'Neu' : 'Änderung'; echo '</td><td>'; echo $rec[0]; echo '</td><td>'; echo guiInternLink($session, $rec[1], $rec[1]); echo '</td><td>'; guiAuthorLink($session, $rec[2]); echo '</td><td>'; echo dbSqlDateToText($session, $rec[3]); $pred_rec = dbSingleValue($session, 'select max(id) from ' . dbTable($session, T_Text) . ' where page=' . $rec[5] . ' and createdat<' . dbSqlDateTime($session, $time_2)); if ($pred_rec > 0) { echo '</td><td>'; guiInternLink($session, $rec[5] . '?action=' . A_Diff . '&text_id=' . $rec[0] . '&text_id2=' . $pred_rec, 'Unterschied zum Vortag (' . $pred_rec . ')'); } echo '</td></tr>' . "\n"; } while (($rec = dbNextRecord($session)) != null); } /* if (false){ $ids = dbIdList2 ($session, T_Text, 'distinct page', $condition); if ($ids) { echo '<tr><td><b>'; echo $time_0; echo'</b></td></tr>' . "\n"; foreach ($ids as $ii => $pageid) { $page = dbGetRecordById ($session, T_Page, $pageid, 'name'); $text = dbFirstRecord ($session, 'select id,createdby,createdat,replacedby from ' . dbTable ($session, T_Text) . ' where page=' . (0 + $pageid) . ' and ' . $condition . ' order by id desc'); $count = 0; while ($text) { $pred_text = dbSingleValue ($session, 'select max(id) from ' . dbTable ($session, T_Text) . ' where page=' . $pageid . ' and createdat<' . dbSqlDateTime ($session, $time_2)); echo '<tr><td>'; echo dbSingleValue ($session, 'select min(id) from ' . dbTable ($session, T_Text) . ' where page=' . $pageid) == $text [0] ? 'Neu' : 'Änderung'; echo '</td><td>'; echo $text [0]; echo '</td><td>'; echo $count++ > 0 ? htmlentities ($page [0]) : guiInternLink ($session, $page [0], $page [0]); echo '</td><td>'; guiAuthorLink ($session, $text [1]); echo '</td><td>'; echo dbSqlDateToText ($session, $text [2]); if ($pred_text > 0) { echo '</td><td>'; guiInternLink ($session, $page [0] . '?action=' . A_Diff . '&text_id=' . $pred_text . '&text_id2=' . $text [0], 'Unterschied zum Vortag (' . $pred_text . ')'); } echo '</td></tr>' . "\n"; $text = dbNextRecord ($session); } } } } */ } echo '</table>'; guiStandardBodyEnd($session, Th_StandardBodyEnd); }