* @param string $withmap Should we copy whole map of existing FTS configuration to the new one
* @param string $makeDefault Should this configuration be the default for locale given
* @param string $comment If omitted, defaults to nothing
+ *
* @return 0 success
*/
function createFtsConfiguration($cfgname, $parser = '', $template = '', $comment = '') {
$this->fieldClean($cfgname);
- $sql = "CREATE TEXT SEARCH CONFIGURATION \"{$cfgname}\" (";
+ $sql = "CREATE TEXT SEARCH CONFIGURATION \"{$this->_schema}\".\"{$cfgname}\" (";
if ($parser != '') {
$this->fieldClean($parser['schema']);
$this->fieldClean($parser['parser']);
$sql .= " PARSER = {$parser}";
}
if ($template != '') {
- $this->fieldClean($template);
- $sql .= " COPY = \"{$template}\"";
+ $this->fieldClean($template['schema']);
+ $this->fieldClean($template['name']);
+ $sql .= " COPY = \"{$template['schema']}\".\"{$template['name']}\"";
}
$sql .= ")";
}
/**
- * Returns all FTS configurations available
+ * Returns available FTS configurations
+ * @param $all if false, returns schema qualified FTS confs
+ *
+ * @return A recordset
*/
- function getFtsConfigurations() {
- $sql = "
+ function getFtsConfigurations($all = true) {
+
+ $sql = "
SELECT
n.nspname as schema,
c.cfgname as name,
pg_catalog.pg_ts_config c
JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace
WHERE
- pg_catalog.pg_ts_config_is_visible(c.oid)
- ORDER BY
- schema, name";
+ pg_catalog.pg_ts_config_is_visible(c.oid)";
+
+ if (!$all)
+ $sql.= " AND n.nspname='{$this->_schema}'\n";
+
+ $sql.= "ORDER BY name";
+
return $this->selectSet($sql);
}
/**
* Return all information related to a FTS configuration
* @param $ftscfg The name of the FTS configuration
+ *
* @return FTS configuration information
*/
function getFtsConfigurationByName($ftscfg) {
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.cfgnamespace
LEFT JOIN pg_catalog.pg_ts_parser p ON p.oid = c.cfgparser
WHERE pg_catalog.pg_ts_config_is_visible(c.oid)
- AND c.cfgname = '{$ftscfg}'";
+ AND c.cfgname = '{$ftscfg}'
+ AND n.nspname='{$this->_schema}'";
return $this->selectSet($sql);
}
/**
- * Returns the map of FTS configuration given (list of mappings (tokens) and their processing dictionaries)
- *
+ * Returns the map of FTS configuration given
+ * (list of mappings (tokens) and their processing dictionaries)
* @param string $ftscfg Name of the FTS configuration
+ *
+ * @return RecordSet
*/
function getFtsConfigurationMap($ftscfg) {
+
$this->fieldClean($ftscfg);
- $getOidSql = "SELECT oid FROM pg_catalog.pg_ts_config WHERE cfgname = '{$ftscfg}'";
- $oidSet = $this->selectSet($getOidSql);
+
+ $oidSet = $this->selectSet("SELECT c.oid
+ FROM pg_catalog.pg_ts_config AS c
+ LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.cfgnamespace)
+ WHERE c.cfgname = '{$ftscfg}'
+ AND n.nspname='{$this->_schema}'");
+
$oid = $oidSet->fields['oid'];
$sql = "
pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m, pg_catalog.pg_ts_dict d,
pg_catalog.pg_namespace n
WHERE
- c.oid = {$oid} AND m.mapcfg = c.oid and m.mapdict = d.oid and d.dictnamespace = n.oid
+ c.oid = {$oid}
+ AND m.mapcfg = c.oid
+ AND m.mapdict = d.oid
+ AND d.dictnamespace = n.oid
ORDER BY name
";
return $this->selectSet($sql);
}
/**
- * Returns all FTS parsers available
+ * Returns FTS parsers available
+ * @param $all if false, return only Parsers from the current schema
+ *
+ * @return RecordSet
*/
- function getFtsParsers() {
+ function getFtsParsers($all = true) {
+
$sql = "
SELECT
n.nspname as schema,
p.prsname as name,
pg_catalog.obj_description(p.oid, 'pg_ts_parser') as comment
FROM pg_catalog.pg_ts_parser p
- LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.prsnamespace
- WHERE pg_catalog.pg_ts_parser_is_visible(p.oid)
- ORDER BY schema, name";
+ LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = p.prsnamespace)
+ WHERE pg_catalog.pg_ts_parser_is_visible(p.oid)";
+
+ if (!$all)
+ $sql.= " AND n.nspname='{$this->_schema}'\n";
+
+ $sql.= "ORDER BY name";
+
return $this->selectSet($sql);
}
/**
- * Returns all FTS dictionaries available
+ * Returns FTS dictionaries available
+ * @param $all if false, return only Dics from the current schema
+ *
+ * @returns RecordSet
*/
- function getFtsDictionaries() {
+ function getFtsDictionaries($all = true) {
+
$sql = "
SELECT
n.nspname as schema, d.dictname as name,
pg_catalog.obj_description(d.oid, 'pg_ts_dict') as comment
FROM pg_catalog.pg_ts_dict d
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.dictnamespace
- WHERE pg_catalog.pg_ts_dict_is_visible(d.oid)
- ORDER BY schema, name;";
+ WHERE pg_catalog.pg_ts_dict_is_visible(d.oid)";
+
+ if (!$all)
+ $sql.= " AND n.nspname='{$this->_schema}'\n";
+
+ $sql.= "ORDER BY name;";
+
return $this->selectSet($sql);
}
* Returns all FTS dictionary templates available
*/
function getFtsDictionaryTemplates() {
+
$sql = "
SELECT
n.nspname as schema,
FROM pg_catalog.pg_ts_template t
LEFT JOIN pg_catalog.pg_namespace n ON n.oid = t.tmplnamespace
WHERE pg_catalog.pg_ts_template_is_visible(t.oid)
- ORDER BY schema, name;";
+ ORDER BY name;";
+
return $this->selectSet($sql);
}
/**
* Drops FTS coniguration
+ * @param $ftscfg The configuration's name
+ * @param $cascade Cascade to dependenced objects
+ *
+ * @return 0 on success
*/
function dropFtsConfiguration($ftscfg, $cascade) {
$this->fieldClean($ftscfg);
- $sql = "DROP TEXT SEARCH CONFIGURATION \"{$ftscfg}\"";
- if ($cascade) $sql .= " CASCADE";
+ $sql = "DROP TEXT SEARCH CONFIGURATION \"{$this->_schema}\".\"{$ftscfg}\"";
+ if ($cascade) $sql .= ' CASCADE';
return $this->execute($sql);
}
/**
* Drops FTS dictionary
+ * @param $ftsdict The dico's name
+ * @param $cascade Cascade to dependenced objects
*
* @todo Support of dictionary templates dropping
+ * @return 0 on success
*/
- function dropFtsDictionary($ftsdict, $cascade = true) {
+ function dropFtsDictionary($ftsdict, $cascade) {
$this->fieldClean($ftsdict);
$sql = "DROP TEXT SEARCH DICTIONARY";
- $sql .= " \"{$ftsdict}\"";
- if ($cascade) $sql .= " CASCADE";
+ $sql .= " \"{$this->_schema}\".\"{$ftsdict}\"";
+ if ($cascade) $sql .= ' CASCADE';
return $this->execute($sql);
}
/**
* Alters FTS configuration
+ * @param $cfgname The conf's name
+ * @param $comment A comment on for the conf
+ * @param $name The new conf name
+ *
+ * @return 0 on success
*/
function updateFtsConfiguration($cfgname, $comment, $name) {
- $this->fieldClean($cfgname);
- $this->fieldClean($name);
- $this->clean($comment);
$status = $this->beginTransaction();
if ($status != 0) {
return -1;
}
+ $this->fieldClean($cfgname);
+ $this->clean($comment);
+
$status = $this->setComment('TEXT SEARCH CONFIGURATION', $cfgname, '', $comment);
if ($status != 0) {
$this->rollbackTransaction();
// Only if the name has changed
if ($name != $cfgname) {
- $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$cfgname}\" RENAME TO \"{$name}\"";
+ $this->fieldClean($name);
+
+ $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$this->_schema}\".\"{$cfgname}\" RENAME TO \"{$name}\"";
$status = $this->execute($sql);
if ($status != 0) {
$this->rollbackTransaction();
* @param string $init The name of the function, which initializes dictionary
* @param string $option Usually, it stores various options required for the dictionary
* @param string $comment If omitted, defaults to nothing
+ *
* @return 0 success
*/
- function createFtsDictionary($dictname, $isTemplate = false, $template = '', $lexize = '', $init = '', $option = '', $comment = '') {
+ function createFtsDictionary($dictname, $isTemplate = false, $template = '', $lexize = '',
+ $init = '', $option = '', $comment = '') {
+
$this->fieldClean($dictname);
$this->fieldClean($template);
$this->fieldClean($lexize);
$this->fieldClean($init);
$this->fieldClean($option);
- $this->clean($comment);
$sql = "CREATE TEXT SEARCH";
if ($isTemplate) {
- $sql .= " TEMPLATE {$dictname} (";
+ $sql .= " TEMPLATE \"{$this->_schema}\".\"{$dictname}\" (";
if ($lexize != '') $sql .= " LEXIZE = {$lexize}";
if ($init != '') $sql .= ", INIT = {$init}";
$sql .= ")";
$whatToComment = 'TEXT SEARCH TEMPLATE';
} else {
- $sql .= " DICTIONARY {$dictname} (";
- if ($template != '') $sql .= " TEMPLATE = {$template}";
+ $sql .= " DICTIONARY \"{$this->_schema}\".\"{$dictname}\" (";
+ if ($template != '') {
+ $this->fieldClean($template['schema']);
+ $this->fieldClean($template['name']);
+ $template = "\"{$template['schema']}\".\"{$template['name']}\"";
+
+ $sql .= " TEMPLATE = {$template}";
+ }
if ($option != '') $sql .= ", {$option}";
$sql .= ")";
$whatToComment = 'TEXT SEARCH DICTIONARY';
}
+ /* if comment, begin a transaction to
+ * run both commands */
if ($comment != '') {
$status = $this->beginTransaction();
if ($status != 0) return -1;
// Set the comment
if ($comment != '') {
+ $this->clean($comment);
+
$status = $this->setComment($whatToComment, $dictname, '', $comment);
if ($status != 0) {
$this->rollbackTransaction();
/**
* Alters FTS dictionary or dictionary template
+ * @param $dictname The dico's name
+ * @param $comment The comment
+ * @param $name The new dico's name
+ *
+ * @return 0 on success
*/
function updateFtsDictionary($dictname, $comment, $name) {
- $this->fieldClean($dictname);
- $this->fieldClean($name);
- $this->clean($comment);
$status = $this->beginTransaction();
if ($status != 0) {
return -1;
}
+ $this->clean($comment);
+ $this->fieldClean($dictname);
$status = $this->setComment('TEXT SEARCH DICTIONARY', $dictname, '', $comment);
if ($status != 0) {
$this->rollbackTransaction();
// Only if the name has changed
if ($name != $dictname) {
- $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$dictname}\" RENAME TO \"{$name}\"";
+ $this->fieldClean($name);
+
+ $sql = "ALTER TEXT SEARCH DICTIONARY \"{$this->_schema}\".\"{$dictname}\" RENAME TO \"{$name}\"";
$status = $this->execute($sql);
if ($status != 0) {
$this->rollbackTransaction();
/**
* Return all information relating to a FTS dictionary
* @param $ftsdict The name of the FTS dictionary
- * @return FTS dictionary information
+ *
+ * @return RecordSet of FTS dictionary information
*/
function getFtsDictionaryByName($ftsdict) {
+
$this->clean($ftsdict);
+
$sql = "SELECT
- n.nspname as schema,
- d.dictname as name,
- ( SELECT COALESCE(nt.nspname, '(null)')::pg_catalog.text || '.' || t.tmplname FROM
- pg_catalog.pg_ts_template t
- LEFT JOIN pg_catalog.pg_namespace nt ON nt.oid = t.tmplnamespace
- WHERE d.dicttemplate = t.oid ) AS template,
- d.dictinitoption as init,
- pg_catalog.obj_description(d.oid, 'pg_ts_dict') as comment
- FROM pg_catalog.pg_ts_dict d
- LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.dictnamespace
- WHERE d.dictname = '{$ftsdict}'
- AND pg_catalog.pg_ts_dict_is_visible(d.oid)
- ORDER BY schema, name";
+ n.nspname as schema,
+ d.dictname as name,
+ ( SELECT COALESCE(nt.nspname, '(null)')::pg_catalog.text || '.' || t.tmplname FROM
+ pg_catalog.pg_ts_template t
+ LEFT JOIN pg_catalog.pg_namespace nt ON nt.oid = t.tmplnamespace
+ WHERE d.dicttemplate = t.oid ) AS template,
+ d.dictinitoption as init,
+ pg_catalog.obj_description(d.oid, 'pg_ts_dict') as comment
+ FROM pg_catalog.pg_ts_dict d
+ LEFT JOIN pg_catalog.pg_namespace n ON n.oid = d.dictnamespace
+ WHERE d.dictname = '{$ftsdict}'
+ AND pg_catalog.pg_ts_dict_is_visible(d.oid)
+ AND n.nspname='{$this->_schema}'
+ ORDER BY name";
return $this->selectSet($sql);
}
* @param array $mapping Array of tokens' names
* @param string $action What to do with the mapping: add, alter or drop
* @param string $dictname Dictionary that will process tokens given or null in case of drop action
+ *
* @return 0 success
*/
function changeFtsMapping($ftscfg, $mapping, $action, $dictname = null) {
- $this->fieldClean($ftscfg);
- $this->fieldClean($dictname);
- $this->arrayClean($mapping);
if (count($mapping) > 0) {
+ $this->fieldClean($ftscfg);
+ $this->fieldClean($dictname);
+ $this->arrayClean($mapping);
+
switch ($action) {
case 'alter':
$whatToDo = "ALTER";
$whatToDo = "ADD";
break;
}
- $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$ftscfg}\" {$whatToDo} MAPPING FOR ";
+
+ $sql = "ALTER TEXT SEARCH CONFIGURATION \"{$this->_schema}\".\"{$ftscfg}\" {$whatToDo} MAPPING FOR ";
$sql .= implode(",", $mapping);
if ($action != 'drop' && !empty($dictname)) {
$sql .= " WITH {$dictname}";
}
- $status = $this->beginTransaction();
- if ($status != 0) {
- $this->rollbackTransaction();
- return -1;
- }
- $status = $this->execute($sql);
- if ($status != 0) {
- $this->rollbackTransaction();
- return -1;
- }
- return $this->endTransaction();
- } else {
+ return $this->execute($sql);
+ }
+ else {
return -1;
}
}
* Return all information related to a given FTS configuration's mapping
* @param $ftscfg The name of the FTS configuration
* @param $mapping The name of the mapping
+ *
* @return FTS configuration information
*/
function getFtsMappingByName($ftscfg, $mapping) {
$this->fieldClean($ftscfg);
$this->fieldClean($mapping);
- $getOidSql = "SELECT oid, cfgparser FROM pg_catalog.pg_ts_config WHERE cfgname = '{$ftscfg}'";
- $oidSet = $this->selectSet($getOidSql);
+ $oidSet = $this->selectSet("SELECT c.oid, cfgparser
+ FROM pg_catalog.pg_ts_config AS c
+ LEFT JOIN pg_catalog.pg_namespace AS n ON n.oid = c.cfgnamespace
+ WHERE c.cfgname = '{$ftscfg}'
+ AND n.nspname='{$this->_schema}'");
+
$oid = $oidSet->fields['oid'];
$cfgparser = $oidSet->fields['cfgparser'];
- $getTokenIdSql = "SELECT tokid FROM pg_catalog.ts_token_type({$cfgparser}) WHERE alias = '{$mapping}'";
- $tokenIdSet = $this->selectSet($getTokenIdSql);
+ $tokenIdSet = $this->selectSet("SELECT tokid
+ FROM pg_catalog.ts_token_type({$cfgparser})
+ WHERE alias = '{$mapping}'");
+
$tokid = $tokenIdSet->fields['tokid'];
$sql = "SELECT
- (SELECT t.alias FROM pg_catalog.ts_token_type(c.cfgparser) AS t WHERE t.tokid = m.maptokentype) AS name,
- d.dictname as dictionaries
- FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m, pg_catalog.pg_ts_dict d
- WHERE c.oid = {$oid} AND m.mapcfg = c.oid AND m.maptokentype = {$tokid} AND m.mapdict = d.oid
- LIMIT 1;";
+ (SELECT t.alias FROM pg_catalog.ts_token_type(c.cfgparser) AS t WHERE t.tokid = m.maptokentype) AS name,
+ d.dictname as dictionaries
+ FROM pg_catalog.pg_ts_config AS c, pg_catalog.pg_ts_config_map AS m, pg_catalog.pg_ts_dict d
+ WHERE c.oid = {$oid} AND m.mapcfg = c.oid AND m.maptokentype = {$tokid} AND m.mapdict = d.oid
+ LIMIT 1;";
+
return $this->selectSet($sql);
}
/**
- * Return list of FTS mappings possible for given parser (specified by given configuration since configuration
- * can only have 1 parser)
+ * Return list of FTS mappings possible for given parser
+ * (specified by given configuration since configuration can only have 1 parser)
+ * @param $ftscfg The config's name that use the parser
+ *
+ * @return 0 on success
*/
function getFtsMappings($ftscfg) {
+
$cfg = $this->getFtsConfigurationByName($ftscfg);
- $sql = "SELECT alias AS name, description FROM pg_catalog.ts_token_type({$cfg->fields['parser_id']}) ORDER BY name";
+
+ $sql = "SELECT alias AS name, description
+ FROM pg_catalog.ts_token_type({$cfg->fields['parser_id']})
+ ORDER BY name";
+
return $this->selectSet($sql);
}
case 'TEXT SEARCH DICTIONARY':
case 'TEXT SEARCH TEMPLATE':
case 'TEXT SEARCH PARSER':
- $sql .= "\"{$obj_name}\" IS ";
+ $sql .= "\"{$this->_schema}\".\"{$obj_name}\" IS ";
break;
case 'FUNCTION':
$sql .= "\"{$this->_schema}\".{$obj_name} IS ";
global $data, $misc;
global $lang;
- $misc->printTrail('database');
- $misc->printTabs('database','fulltext');
+ $misc->printTrail('schema');
+ $misc->printTabs('schema','fulltext');
$misc->printTabs('fulltext','ftsconfigs');
$misc->printMsg($msg);
- $cfgs = $data->getFtsConfigurations();
+ $cfgs = $data->getFtsConfigurations(false);
$columns = array(
'configuration' => array(
echo "<p><input type=\"hidden\" name=\"action\" value=\"dropdict\" />\n";
echo "<input type=\"hidden\" name=\"database\" value=\"", htmlspecialchars($_REQUEST['database']), "\" />\n";
echo "<input type=\"hidden\" name=\"ftsdict\" value=\"", htmlspecialchars($_REQUEST['ftsdict']), "\" />\n";
- echo "<input type=\"hidden\" name=\"ftscfg\" value=\"", htmlspecialchars($_REQUEST['ftscfg']), "\" />\n";
+ //echo "<input type=\"hidden\" name=\"ftscfg\" value=\"", htmlspecialchars($_REQUEST['ftscfg']), "\" />\n";
echo "<input type=\"hidden\" name=\"prev_action\" value=\"viewdicts\" /></p>\n";
echo $misc->form;
echo "<input type=\"submit\" name=\"drop\" value=\"{$lang['strdrop']}\" />\n";
$status = $data->dropFtsDictionary($_POST['ftsdict'], isset($_POST['cascade']));
if ($status == 0) {
$_reload_browser = true;
- doDefault($lang['strftsdictdropped']);
+ doViewDicts($lang['strftsdictdropped']);
}
else
- doDefault($lang['strftsdictdroppedbad']);
+ doViewDicts($lang['strftsdictdroppedbad']);
}
}
echo "<form action=\"fulltext.php\" method=\"post\">\n";
echo "<table style=\"width: 100%\">\n";
+ /* conf name */
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n";
echo "\t\t<td class=\"data1\"><input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"",
htmlspecialchars($_POST['formName']), "\" /></td>\n\t</tr>\n";
// Template
echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftstemplate']}</th>\n";
- echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"formTemplate\">\n";
- echo "\t\t\t\t<option value=\"\"></option>\n";
+ echo "\t\t<td class=\"data1\">";
+
+ $tpls = array();
+ $tplsel = '';
while (!$ftscfgs->EOF) {
- $ftscfg = htmlspecialchars($ftscfgs->fields['name']);
- echo "\t\t\t\t<option value=\"{$ftscfg}\"",
- ($ftscfg == $_POST['formTemplate']) ? ' selected="selected"' : '', ">{$ftscfg}</option>\n";
+ $data->fieldClean($ftscfgs->fields['schema']);
+ $data->fieldClean($ftscfgs->fields['name']);
+ $tplname = $ftscfgs->fields['schema'] .'.'. $ftscfgs->fields['name'];
+ $tpls[$tplname] = serialize(array(
+ 'name' => $ftscfgs->fields['name'],
+ 'schema' => $ftscfgs->fields['schema']
+ ));
+ if ($_POST['formTemplate'] == $tpls[$tplname]) {
+ $tplsel = htmlspecialchars($tpls[$tplname]);
+ }
$ftscfgs->moveNext();
}
- echo "\t\t\t</select>\n\t\t</td>\n\t</tr>\n";
+ echo GUI::printCombo($tpls, 'formTemplate', true, $tplsel, false);
+ echo "\n\t\t</td>\n\t</tr>\n";
// Parser
echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftsparser']}</th>\n";
echo "\t\t<td class=\"data1\">\n";
$ftsparsers_ = array();
$ftsparsel = '';
- if (!$ftsparsers->EOF) {
- $ftsparsers = $ftsparsers->getArray();
- foreach ($ftsparsers as $a) {
- $data->fieldClean($a['schema']);
- $data->fieldClean($a['name']);
- $ftsparsers_["\"{$a['schema']}\".\"{$a['name']}\""] = serialize(array('schema' => $a['schema'], 'parser' => $a['name']));
- if ($_POST['formParser'] == $ftsparsers_["\"{$a['schema']}\".\"{$a['name']}\""]) {
- $ftsparsel = htmlspecialchars($ftsparsers_["\"{$a['schema']}\".\"{$a['name']}\""]);
- }
+ while (!$ftsparsers->EOF) {
+ $data->fieldClean($ftsparsers->fields['schema']);
+ $data->fieldClean($ftsparsers->fields['name']);
+ $parsername = $ftsparsers->fields['schema'] .'.'. $ftsparsers->fields['name'];
+
+ $ftsparsers_[$parsername] = serialize(array(
+ 'parser' => $ftsparsers->fields['name'],
+ 'schema' => $ftsparsers->fields['schema']
+ ));
+ if ($_POST['formParser'] == $ftsparsers_[$parsername]) {
+ $ftsparsel = htmlspecialchars($ftsparsers_[$parsername]);
}
+ $ftsparsers->moveNext();
}
echo GUI::printCombo($ftsparsers_, 'formParser', true, $ftsparsel, false);
echo "\n\t\t</td>\n\t</tr>\n";
if ($_POST['formName'] == '') doCreateConfig($lang['strftsconfigneedsname']);
if (($_POST['formParser'] != '') && ($_POST['formTemplate'] != '')) doCreateConfig($lang['strftscantparsercopy']);
else {
- if ($_POST['formParser'] != '') $_POST['formParser'] = unserialize($_POST['formParser']);
+ if ($_POST['formParser'] != '') $formParser = unserialize($_POST['formParser']);
+ else $formParser = '';
+ if ($_POST['formTemplate'] != '') $formTemplate = unserialize($_POST['formTemplate']);
+ else $formTemplate = '';
- $status = $data->createFtsConfiguration($_POST['formName'], $_POST['formParser'], $_POST['formTemplate'], $_POST['formComment']);
+ $status = $data->createFtsConfiguration($_POST['formName'], $formParser, $formTemplate, $_POST['formComment']);
if ($status == 0) {
$_reload_browser = true;
doDefault($lang['strftsconfigcreated']);
/**
* Save the form submission containing changes to a FTS configuration
*/
- function doSaveAlterConfig($msg = '') {
+ function doSaveAlterConfig() {
global $data, $misc, $lang;
$status = $data->updateFtsConfiguration($_POST['ftscfg'], $_POST['formComment'], $_POST['formName']);
global $data, $misc;
global $lang;
- $misc->printTrail('database');
- $misc->printTabs('database','fulltext');
+ $misc->printTrail('schema');
+ $misc->printTabs('schema','fulltext');
$misc->printTabs('fulltext','ftsparsers');
$misc->printMsg($msg);
- $parsers = $data->getFtsParsers();
+ $parsers = $data->getFtsParsers(false);
$columns = array(
'schema' => array(
global $data, $misc;
global $lang;
- $misc->printTrail('database');
- $misc->printTabs('database','fulltext');
+ $misc->printTrail('schema');
+ $misc->printTabs('schema','fulltext');
$misc->printTabs('fulltext','ftsdicts');
$misc->printMsg($msg);
- $dicts = $data->getFtsDictionaries();
+ $dicts = $data->getFtsDictionaries(true);
$columns = array(
'schema' => array(
global $lang;
$misc->printTrail('ftscfg');
- $misc->printTabs('database','fulltext');
+ $misc->printTabs('schema','fulltext');
$misc->printTabs('fulltext','ftsconfigs');
$misc->printMsg($msg);
global $data, $misc;
global $lang;
+ include_once('./classes/Gui.php');
+
$server_info = $misc->getServerInfo();
if (!isset($_POST['formName'])) $_POST['formName'] = '';
+ if(!isset($_POST['formIsTemplate'])) $_POST['formIsTemplate'] = false;
if (!isset($_POST['formTemplate'])) $_POST['formTemplate'] = '';
if (!isset($_POST['formLexize'])) $_POST['formLexize'] = '';
if (!isset($_POST['formInit'])) $_POST['formInit'] = '';
if (!isset($_POST['formComment'])) $_POST['formComment'] = '';
// Fetch all FTS dictionaries from the database
- $ftsdicttemplates = $data->getFtsDictionaryTemplates();
+ $ftstpls = $data->getFtsDictionaryTemplates();
$misc->printTrail('schema');
// TODO: create doc links
echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strname']}</th>\n";
echo "\t\t<td class=\"data1\"><input name=\"formName\" size=\"32\" maxlength=\"{$data->_maxNameLen}\" value=\"",
htmlspecialchars($_POST['formName']), "\" /> ",
- "<input type=\"checkbox\" name=\"formIsTemplate\" id=\"formIsTemplate\"", @$_POST['formIsTemplate'] ? ' checked="checked" ' : '',
- "onchange=\"document.getElementsByName('formTemplate')[0].disabled = this.checked;document.getElementsByName('formOption')[0].disabled = this.checked;document.getElementsByName('formLexize')[0].disabled = !this.checked;document.getElementsByName('formInit')[0].disabled = !this.checked;\" />",
+ "<input type=\"checkbox\" name=\"formIsTemplate\" id=\"formIsTemplate\"", $_POST['formIsTemplate'] ? ' checked="checked" ' : '', " />\n",
"<label for=\"formIsTemplate\">{$lang['strftscreatedicttemplate']}</label></td>\n\t</tr>\n";
// Template
echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftstemplate']}</th>\n";
- echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"formTemplate\"", @$_POST['formIsTemplate'] ? ' disabled="disabled"' : '', ">\n";
- echo "\t\t\t\t<option value=\"\"></option>\n";
- while (!$ftsdicttemplates->EOF) {
- $ftsdict = htmlspecialchars($ftsdicttemplates->fields['name']);
- echo "\t\t\t\t<option value=\"{$ftsdict}\"",
- ($ftsdict == $_POST['formTemplate']) ? ' selected="selected"' : '', ">{$ftsdict}</option>\n";
- $ftsdicttemplates->moveNext();
+ echo "\t\t<td class=\"data1\">";
+ $tpls = array();
+ $tplsel = '';
+ while (!$ftstpls->EOF) {
+ $data->fieldClean($ftstpls->fields['schema']);
+ $data->fieldClean($ftstpls->fields['name']);
+ $tplname = $ftstpls->fields['schema'] .'.'. $ftstpls->fields['name'];
+ $tpls[$tplname] = serialize(array(
+ 'name' => $ftstpls->fields['name'],
+ 'schema' => $ftstpls->fields['schema']
+ ));
+ if ($_POST['formTemplate'] == $tpls[$tplname]) {
+ $tplsel = htmlspecialchars($tpls[$tplname]);
+ }
+ $ftstpls->moveNext();
}
+ echo GUI::printCombo($tpls, 'formTemplate', true, $tplsel, false);
+ echo "\n\t\t</td>\n\t</tr>\n";
// TODO: what about maxlengths?
// Lexize
echo "\t<tr>\n\t\t<th class=\"data left\">{$lang['strftslexize']}</th>\n";
echo "\t\t<td class=\"data1\"><input name=\"formLexize\" size=\"32\" maxlength=\"1000\" value=\"",
- htmlspecialchars($_POST['formLexize']), "\" ", @$_POST['formIsTemplate'] ? '' : ' disabled="disabled" ',
+ htmlspecialchars($_POST['formLexize']), "\" ", isset($_POST['formIsTemplate']) ? '' : ' disabled="disabled" ',
"/></td>\n\t</tr>\n";
// Init
echo "<input type=\"submit\" name=\"create\" value=\"{$lang['strcreate']}\" />\n";
echo "<input type=\"submit\" name=\"cancel\" value=\"{$lang['strcancel']}\" />\n";
echo "</p>\n";
- echo "</form>\n";
+ echo "</form>\n",
+ "<script type=\"text/javascript\">
+ function templateOpts() {
+ isTpl = document.getElementsByName('formIsTemplate')[0].checked;
+ document.getElementsByName('formTemplate')[0].disabled = isTpl;
+ document.getElementsByName('formOption')[0].disabled = isTpl;
+ document.getElementsByName('formLexize')[0].disabled = !isTpl;
+ document.getElementsByName('formInit')[0].disabled = !isTpl;
+ }
+
+ document.getElementsByName('formIsTemplate')[0].onchange = templateOpts;
+
+ templateOpts();
+ </script>\n";
}
/**
// Check that they've given a name
if ($_POST['formName'] == '') doCreateDict($lang['strftsdictneedsname']);
else {
- $status = $data->createFtsDictionary($_POST['formName'], @$_POST['formIsTemplate'], @$_POST['formTemplate'], @$_POST['formLexize'], @$_POST['formInit'], @$_POST['formOption'], $_POST['formComment']);
+
+ if(!isset($_POST['formIsTemplate'])) $_POST['formIsTemplate'] = false;
+ if(isset($_POST['formTemplate']))
+ $formTemplate = unserialize($_POST['formTemplate']);
+ else
+ $formTemplate = '';
+ if(!isset($_POST['formLexize'])) $_POST['formLexize'] = '';
+ if(!isset($_POST['formInit'])) $_POST['formInit'] = '';
+ if(!isset($_POST['formOption'])) $_POST['formOption'] = '';
+
+ $status = $data->createFtsDictionary($_POST['formName'], $_POST['formIsTemplate'],
+ $formTemplate, $_POST['formLexize'],
+ $_POST['formInit'], $_POST['formOption'], $_POST['formComment']
+ );
+
if ($status == 0) {
$_reload_browser = true;
doViewDicts($lang['strftsdictcreated']);
/**
* Save the form submission containing changes to a FTS dictionary
*/
- function doSaveAlterDict($msg = '') {
+ function doSaveAlterDict() {
global $data, $misc, $lang;
$status = $data->updateFtsDictionary($_POST['ftsdict'], $_POST['formComment'], $_POST['formName']);
/**
* Save the form submission containing changes to a FTS mapping
*/
- function doSaveAlterMapping($msg = '') {
+ function doSaveAlterMapping() {
global $data, $misc, $lang;
$mappingArray = (is_array($_POST['formMapping']) ? $_POST['formMapping'] : array($_POST['formMapping']));
/**
* Save the form submission containing parameters of a new FTS mapping
*/
- function doSaveAddMapping($msg = '') {
+ function doSaveAddMapping() {
global $data, $misc, $lang;
$mappingArray = (is_array($_POST['formMapping']) ? $_POST['formMapping'] : array($_POST['formMapping']));
switch($what) {
case 'FtsCfg':
- $items = $data->getFtsConfigurations();
+ $items = $data->getFtsConfigurations(false);
$urlvars = array('action' => 'viewconfig', 'ftscfg' => field('name'));
break;
case 'FtsDict':
- $items = $data->getFtsDictionaries();
+ $items = $data->getFtsDictionaries(true);
$urlvars = array('action' => 'viewdicts');
break;
case 'FtsParser':
- $items = $data->getFtsParsers();
+ $items = $data->getFtsParsers(false);
$urlvars = array('action' => 'viewparsers');
break;
default: