function smarty_function_artist_altnames_list($params, &$smarty)
{
    if (empty($params['var'])) {
        $smarty->trigger_error("assign: missing 'var' parameter");
        return;
    }
    if (empty($params['query'])) {
        $smarty->trigger_error("assign: missing 'var' parameter");
        return;
    } else {
        $query = $params['query'];
    }
    $searchterm = $query['artist'];
    $searchtype = 'parentid';
    global $db, $db_prefix;
    $thesaurus = new thesaurusDB($db, $db_prefix);
    $rs = $thesaurus->query('names', $searchterm, $searchtype);
    $sql = "queried through thesaurusDB::query('names', '{$searchterm}', '{$searchtype}');";
    if (count($rs)) {
        foreach ($rs as $row) {
            array_walk($row, '__stripslashes');
            $result[$row['id']] = $row;
        }
    } else {
        $result = false;
    }
    $smarty->assign($params['var'], $result);
    if (!empty($params['sql'])) {
        $smarty->assign($params['sql'], $sql);
    }
}
function smarty_function_artist_list($params, &$smarty)
{
    if (empty($params['var'])) {
        $smarty->trigger_error("assign: missing 'var' parameter");
        return;
    }
    if (empty($params['query'])) {
        $smarty->trigger_error("assign: missing 'var' parameter");
        return;
    } else {
        $query = $params['query'];
    }
    //debug($query);
    global $db, $db_prefix;
    $thesaurus = new thesaurusDB($db, $db_prefix);
    // $frommeta indicates whether or not the data is coming from the _existing_ metadata
    $frommeta = false;
    // search for artists by the artistsearch field if given or by the meta-id otherwise
    if (empty($query['searchartist'])) {
        if (empty($query['id'])) {
            $searchtype = false;
        } else {
            extractID($query['id'], $collectionid, $imageid);
            $searchterm = "{$collectionid}:{$imageid}";
            $searchtype = 'metaid';
            $frommeta = true;
        }
    } else {
        $searchterm = $query['searchartist'];
        $searchtype = 'name';
    }
    $result = array();
    if ($searchtype != false) {
        $rs = $thesaurus->query('names', $searchterm, $searchtype);
        $sql = "queried through thesaurusDB::query('names', '{$searchterm}', '{$searchtype}');";
        /*if ($frommeta) {
              $params['query']['name1id'] = $rs[0]['id'];
              $params['query']['name1text'] = $rs[0]['name'];
              $params['query']['name1id'] = $rs[0]['id'];
              $params['query']['name1text'] = $rs[0]['name'];
              $smarty->assign('query', $params['query']);
          }*/
        //make the ids be keys, and strip slashes out
        foreach ($rs as $row) {
            array_walk($row, '__stripslashes');
            $result[$row['id']] = $row;
        }
    } else {
        $sql = 'no query';
    }
    //debug($result);
    $smarty->assign($params['var'], $result);
    if (!empty($params['sql'])) {
        $smarty->assign($params['sql'], $sql);
    }
}
function smarty_function_city_list($params, &$smarty)
{
    if (empty($params['var'])) {
        $smarty->trigger_error("assign: missing 'var' parameter");
        return;
    }
    if (empty($params['query'])) {
        $smarty->trigger_error("assign: missing 'query' parameter");
        return;
    }
    global $db, $db_prefix;
    // query the existing locations
    /*$sql = "SELECT DISTINCT city FROM {$db_prefix}meta ORDER BY city ASC";
    	$rs = $db->GetArray( $sql );*/
    //debug($_REQUEST, false);
    //debug($params['query']);
    $thesaurus = new thesaurusDB($db, $db_prefix);
    // $frommeta indicates whether or not the data is coming from the _existing_ metadata
    $frommeta = false;
    // search by the citysearch field if given, by the meta-id otherwise
    if (empty($params['query']['citysearch'])) {
        if (empty($params['query']['id'])) {
            $searchtype = false;
        } else {
            $searchterm = $params['query']['id'];
            $searchtype = 'metaid';
            $frommeta = true;
        }
    } else {
        $searchterm = $params['query']['citysearch'];
        $searchtype = 'location';
    }
    $result = array();
    if ($searchtype != false) {
        $rs = $thesaurus->query('locations', $searchterm, $searchtype);
        $sql = "queried through thesaurusDB::query('locations', '{$searchterm}', '{$searchtype}');";
        if ($frommeta) {
            $params['query']['city'] = $rs[0]['id'];
            $params['query']['cityname'] = $rs[0]['location'];
            $smarty->assign('query', $params['query']);
        }
        //make the ids be keys
        $result = array();
        foreach ($rs as $row) {
            $result[$row['id']] = $row;
        }
    } else {
        $sql = 'no query';
    }
    $smarty->assign($params['var'], $result);
    $smarty->assign($params['frommeta'], $frommeta);
    if (!empty($params['sql'])) {
        $smarty->assign($params['sql'], $sql);
    }
}
function get_or_set_values($db, $db_prefix, $dilpsid, $field, $fieldtext, $recordid)
{
    //    $name1 = get_or_set_values($db, $db_prefix, $edit['id'], 'name', $edit['name1text'], $edit['name1id']);
    global $config;
    include_once $config['includepath'] . 'thesauri/soundex_fr.php';
    // $db->debug = true;
    switch ($field) {
        case 'location':
            $table = 'location';
            break;
        case 'name':
            $table = 'artist';
            break;
        default:
            $id['is_error'] = true;
            $id['error_msg'] = "\n" . __FILE__ . "::" . __LINE__ . ": Unrecognized field parameter: {$field}\n";
            return $id;
    }
    $table = $db_prefix . $table;
    $text = trim($fieldtext);
    if ($text == '') {
        $result['id'] = 0;
        $result[$field] = $text;
        $result['sounds'] = '';
    } else {
        if ($recordid == 'new') {
            $sql = "select id,  {$field}, sounds from {$table} where lower('{$text}') = trim(lower({$field}))";
        } else {
            $sql = "select id,  {$field}, sounds from {$table} where id = '{$recordid}'";
        }
        //bk: here, may need to handle multiple results - user should be able to pick from available locations
        //    or specify a new hierarchy for the given location
        // for now, just take the first result
        // hopefully, the thesaurus will be comprehensive enough, so that this won't be a problem
        $rs = $db->GetRow($sql);
        if ($rs === false) {
            $result['is_error'] = true;
            $result['error_msg'] = "\n" . $db->ErrorMsg() . "[{$sql}]";
        } else {
            if (empty($rs)) {
                if ($recordid != 'new') {
                    $result['is_error'] = true;
                    $result['error_msg'] = "\nNo record found, when id should exist [{$sql}]";
                } else {
                    $result = false;
                }
            } else {
                $result = $rs;
            }
        }
    }
    // if no matching record was found, insert a new one and get it's id
    if ($result === false) {
        $tdb = new thesaurusDB($db, $db_prefix);
        $sounds = $tdb->get_sounds_string($text);
        if ($field == 'location') {
            $sql = "insert into {$table} (src, source_id, location, loc_type, sounds) " . "values ('dilps'," . $db->qstr($dilpsid) . "," . $db->qstr($text) . ", '83002/inhabited place'," . $db->qstr($sounds) . ")";
        } else {
            if ($field == 'name') {
                $sql = "insert into {$table} (src, name, sounds) " . "values ('dilps'," . $db->qstr($text) . "," . $db->qstr($sounds) . ")";
            } else {
                $sql = "error";
            }
        }
        //die("about to insert: $sql");
        if (!$db->Execute($sql)) {
            $result['is_error'] = true;
            $result['error_msg'] = "\n" . $db->ErrorMsg() . "[{$sql}]";
        } else {
            $result['id'] = $db->Insert_ID();
            $result[$field] = $text;
            $result['sounds'] = $sounds;
        }
    }
    return $result;
}
<?php

// to load names into db from thesaurus file:
require_once '../../globals.inc.php';
include_once $config['includepath'] . 'adodb/adodb.inc.php';
$db = NewADOConnection("mysql");
$res = $db->PConnect($db_host, $db_user, $db_pwd, $db_db);
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
if (!$res) {
    die('no connection');
}
$thesaurus = new thesaurusDB($db, $db_prefix);
$thesaurus->loadDB_names('/home/brian/projects/dilps/test/pknd_0.1.xml');
<?php

/*  to load locations into db from thesaurus file.
 * NOTE: backup and truncate the location table before running this script
 * NOTE: after running this script, run update_meta_table_after_location_reload.php
*/
//$load_sourcedir is defined in thesauri_load_config.inc.php
require_once '../../globals.inc.php';
include_once $config['includepath'] . 'adodb/adodb.inc.php';
include_once $config['includepath'] . 'thesauri/thesauri_load_config.inc.php';
$db = NewADOConnection("mysql");
$res = $db->PConnect($db_host, $db_user, $db_pwd, $db_db);
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
if (!$res) {
    echo 'no connection';
    exit(1);
}
if (isset($argv[1])) {
    $load_sourcefile = $argv[1];
    if (!is_readable($load_sourcefile)) {
        echo "file '{$load_sourcefile}' does not exist or could not be read";
        exit(1);
    }
} else {
    echo 'must specify a source file';
    exit(1);
}
$thesaurus = new thesaurusDB($db, $db_prefix);
//$thesaurus->loadDB_locations($load_sourcedir);
$result = $thesaurus->loadDB_locations($load_sourcefile);
exit($result);
<?php

/*  to update meta table after running reload_location_thesaurus.php
 * NOTE: backup the meta table before running this script
*/
require_once $config['includepath'] . 'globals.inc.php';
include_once $config['includepath'] . 'adodb/adodb.inc.php';
$db = NewADOConnection("mysql");
$res = $db->PConnect($db_host, $db_user, $db_pwd, $db_db);
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
if (!$res) {
    die('no connection');
}
$thesaurus = new thesaurusDB($db, $db_prefix);
$thesaurus->_update_records_from_location_thesaurus();
echo "Finished!\n";