/** Add a new synset to the database. Return -1 on error or
 * the synset's id on success.
 */
function addSynset($db, $auth, $word, $subject_id, $distinction)
{
    if (strlen(trim($word)) < 1) {
        print _("Error: word is too short.");
        return -1;
    } else {
        if (strlen(trim($word)) > 50) {
            print _("Error: word is too long.");
            return -1;
        }
    }
    ### Logging (before saving the word!):
    $date = date("Y-m-d H:i:s");
    $log_id = $db->nextid("user_actions_log");
    $query = sprintf("INSERT INTO user_actions_log\n\t\t\t(id, user_id, ip_address, date, word, type)\n\t\t\tVALUES\n\t\t\t(%d, '%s', '%s', '%s', '%s', '%s')", $log_id, myaddslashes($auth->auth['uid']), myaddslashes(getenv('REMOTE_ADDR')), $date, myaddslashes(escape($word)), ADD_SYNSET);
    $db->query($query);
    // Adding a new meaning
    $subject_id_sql = "NULL";
    if ($subject_id != "") {
        $subject_id_sql = intval($subject_id);
    }
    $distinction_sql = "NULL";
    if ($distinction) {
        $distinction_sql = "'" . myaddslashes(escape($distinction)) . "'";
    }
    $new_meaning_id = $db->nextid("meanings");
    $query = sprintf("INSERT INTO meanings\n\t\t\t\t(id, subject_id, distinction)\n\t\t\t\tVALUES (%d, %s, %s)", $new_meaning_id, $subject_id_sql, $distinction_sql);
    $db->query($query);
    # update the log with the meaning id:
    $query = sprintf("UPDATE user_actions_log\n\t\t\tSET synset_id = %d\n\t\t\tWHERE id = %d", $new_meaning_id, $log_id);
    $db->query($query);
    // check if the word is in the database already
    $query = sprintf("SELECT id, word FROM words \n\t\t\tWHERE word = '%s'", myaddslashes(escape(trim($word))));
    $db->query($query);
    $exists = 0;
    $existing_id = 0;
    # make sure the comparison is case-sensitive:
    while ($db->next_record()) {
        if ($db->f('word') == escape(trim($word))) {
            $exists = 1;
            $existing_id = $db->f('id');
            break;
        }
    }
    if ($exists) {
        // a new meaning for an existing word
        $db->next_record();
        $query = sprintf("INSERT INTO word_meanings\n\t\t\t\t\t(word_id, meaning_id)\n\t\t\t\t\tVALUES (%d, %d)", $existing_id, $new_meaning_id);
        $db->query($query);
    } else {
        // a new word with a new meaning
        $new_word_id = $db->nextid("words");
        $lookup_word = trim(getLookupWord($word));
        if ($lookup_word == trim($word)) {
            $lookup_word = "NULL";
        } else {
            $lookup_word = "'" . myaddslashes(escape($lookup_word)) . "'";
        }
        $query = sprintf("INSERT INTO words\n\t\t\t\t\t(id, word, lookup)\n\t\t\t\t\tVALUES (%d, '%s', %s)", $new_word_id, myaddslashes(escape(trim($word))), $lookup_word);
        $db->query($query);
        $query = sprintf("INSERT INTO word_meanings\n\t\t\t\t\t(word_id, meaning_id)\n\t\t\t\t\tVALUES (%d, %d)", $new_word_id, $new_meaning_id);
        $db->query($query);
    }
    return $new_meaning_id;
}
$db = new DB_Thesaurus();
$db2 = new DB_Thesaurus();
include "../include/tool.php";
if ($auth->auth['uname'] != 'admin') {
    print "Access denied.";
    return;
}
$title = "OpenThesaurus admin interface: update 'lookup' field";
include "../include/top.php";
?>

<?php 
$query = sprintf("SELECT id, word, lookup\n\tFROM words\n\tORDER by word");
$db->query($query);
while ($db->next_record()) {
    $lookup = getLookupWord($db->f('word'));
    $lookup_db = $db->f('lookup');
    if ($lookup == $db->f('word')) {
        # lookup is the same as the original word, so it should be set to NULL
        if (!is_null($lookup_db)) {
            print "Setting lookup of '" . $db->f('word') . "' to NULL<br>\n";
            $query = sprintf("UPDATE words SET lookup = NULL WHERE id = %d", $db->f('id'));
            $db2->query($query);
        }
    } else {
        # lookup is NOT the same as the original word, so it should be set to getLookupWord(...):
        if ($lookup_db != $lookup) {
            print "Setting lookup of '" . $db->f('word') . "' to '{$lookup}'<br>\n";
            $query = sprintf("UPDATE words SET lookup = '%s' WHERE id = %d", addslashes($lookup), $db->f('id'));
            $db2->query($query);
        }
	<ul class="compact"><li>
	<?php 
    $wikilinks = array();
    while ($db->next_record()) {
        $link = $db->f("link");
        $realTitle = $db->f("title");
        if ($queryterm == $link || strpos($link, "(Begriffsklärung)") !== false) {
            continue;
        }
        if (in_array($link, $wikilinks)) {
            continue;
        }
        if ($matches > 0) {
            print ", ";
        }
        print "<a href=\"overview.php?word=" . urlencode(getLookupWord($db->f("link"))) . "\">" . $db->f("link") . "</a>";
        array_push($wikilinks, $link);
        $matches++;
    }
    if ($matches == 0) {
        print T_("No matches");
    } else {
        ?>
	<li class="wiktionarylicense">Quelle: <a class="wikilicenselink"
		href="http://de.wikipedia.org/wiki/<?php 
        $wikilink = escape($realTitle);
        $wikilink = preg_replace("/ /", "_", $wikilink);
        print urlencode($wikilink);
        ?>
">Wikipedia-Seite
		zu '<?php 
 $db->query($query);
 $word_id = 0;
 $exists = 0;
 $existing_id = 0;
 # make sure the comparison is case-sensitive:
 while ($db->next_record()) {
     if ($db->f('word') == escape(trim(uservar('synonym_new')))) {
         $exists = 1;
         $existing_id = $db->f('id');
         break;
     }
 }
 if (!$exists) {
     # word does not exists in database yet
     $word_id = $db->nextid("words");
     $lookup_word = trim(getLookupWord(uservar('synonym_new')));
     if ($lookup_word == trim(uservar('synonym_new'))) {
         $lookup_word = "NULL";
     } else {
         $lookup_word = "'" . myaddslashes(escape($lookup_word)) . "'";
     }
     $query = sprintf("INSERT INTO words\n\t\t\t\t(id, word, lookup) VALUES (%d, '%s', %s)", $word_id, myaddslashes(escape(trim(uservar('synonym_new')))), $lookup_word);
     $db->query($query);
 } else {
     $db->next_record();
     $word_id = $existing_id;
 }
 if ($word_id == 0) {
     die("No word_id found.");
 }
 $old_syns = getSynset(uservar('meaning_id'));
include "../../include/top.php";
$wordfile = "wordlist.txt";
$thesfile = "trimthes.txt";
print "Building data...<br />\n";
// only top10.000 words:		words.word IN (%s) AND
$query = sprintf("SELECT words.id AS word_id, word, meaning_id\n\tFROM words, word_meanings, meanings\n\tWHERE \n\t\twords.id = word_meanings.word_id AND\n\t\tword_meanings.meaning_id = meanings.id AND\n\t\tmeanings.hidden = 0\n\tORDER BY BINARY(word)\n");
$db->query($query);
$words = array();
#$words["-"] = 0;
$prev_word = "";
$l = array();
$last_id = 0;
while ($db->next_record()) {
    if ($prev_word != $db->f('word')) {
        if ($prev_word) {
            $prev_word_lookup = getLookupWord($prev_word);
            if ($prev_word_lookup != $prev_word) {
                if (array_key_exists($prev_word_lookup, $words)) {
                    $words[$prev_word_lookup] = $words[$prev_word_lookup] . "," . join(',', $l);
                } else {
                    $words[$prev_word_lookup] = join(',', $l);
                }
            }
            if (array_key_exists($prev_word, $words)) {
                $words[$prev_word] = $words[$prev_word] . "," . join(',', $l);
            } else {
                $words[$prev_word] = join(',', $l);
            }
        }
        $l = array();
        array_push($l, $db->f('meaning_id'));