示例#1
0
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);
}
示例#2
0
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;
}
示例#3
0
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";
    }
}
示例#4
0
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);
}
示例#6
0
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;
}
示例#7
0
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;
}
示例#8
0
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));
    }
}
示例#9
0
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);
}